Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo inclui os seguintes scripts de exemplo do Azure PowerShell para o Azure DevTest Labs:
- Adicionar um usuário externo a um laboratório
- Criar e atribuir uma função personalizada em um laboratório
- Definir tamanhos de VM (máquina virtual) permitidos para um laboratório
- Adicionar imagens do Marketplace a um laboratório
- Criar uma imagem personalizada de um VHD (disco rígido virtual)
Pré-requisitos
- Para adicionar ou atribuir usuários ou funções, você precisa da função Proprietário em um laboratório, ou das funções Proprietário ou Administrador de Acesso de Usuário na assinatura do Azure que contém o laboratório.
- Para definir tamanhos de VM de laboratório permitidos, adicionar uma imagem do Marketplace ou criar uma imagem personalizada, você precisa, pelo menos, da função Colaborador no laboratório ou na assinatura do Azure.
- Todos os scripts exigem o Azure PowerShell. Você pode usar o Azure Cloud Shell ou instalar o PowerShell localmente.
- No Cloud Shell, selecione o ambiente do PowerShell .
- Para uma instalação local do PowerShell, execute
Update-Module -Name Azpara obter a versão mais recente do Azure PowerShell e execute Connect-AzAccount para entrar no Azure. Se você tiver várias assinaturas do Azure, useSet-AzContext -SubscriptionId "<SubscriptionId>"para fornecer a ID da assinatura que deseja usar.
Adicionar um usuário externo a um laboratório
Este script de exemplo do PowerShell adiciona um usuário externo a um laboratório com a função de usuário do DevTest Labs . O usuário a ser adicionado deve estar na ID do Microsoft Entra da organização.
Para usar o script, substitua os valores de parâmetro no # Values to change comentário por seus próprios valores. Você pode obter os valores subscriptionId, labResourceGroup e labName da página principal do laboratório no portal do Azure.
Este script usa os seguintes comandos:
- Get-AzADUser: obtém o objeto de usuário do Microsoft Entra ID.
- New-AzRoleAssignment: atribui a função de usuário do DevTest Labs ao usuário especificado no escopo especificado.
# Values to change
$subscriptionId = "<Azure subscription ID>"
$labResourceGroup = "<Lab resource group name>"
$labName = "<Lab name>"
$userDisplayName = "<User display name in Microsoft Entra ID>"
# Select the Azure subscription that contains the lab. This step is optional if you have only one subscription.
Select-AzSubscription -SubscriptionId $subscriptionId
# Get the user object.
$adObject = Get-AzADUser -SearchString $userDisplayName
# Assign the role.
$labId = ('/subscriptions/' + $subscriptionId + '/resourceGroups/' + $labResourceGroup + '/providers/Microsoft.DevTestLab/labs/' + $labName)
New-AzRoleAssignment -ObjectId $adObject.Id -RoleDefinitionName 'DevTest Labs User' -Scope $labId
Criar e atribuir uma função de usuário de laboratório personalizada
Este script de exemplo do PowerShell cria uma função personalizada que permite que os usuários do laboratório modifiquem as políticas de laboratório e atribua a função personalizada a um usuário externo. O usuário a quem a função será atribuída deve estar no Microsoft Entra ID da organização.
Para usar o script, substitua os valores de parâmetro no # Values to change comentário por seus próprios valores. Você pode obter os valores subscriptionId, rgName e labName da página principal do laboratório no portal do Azure.
Este script usa os seguintes comandos:
- Get-AzProviderOperation: lista todas as operações disponíveis para o
Microsoft.DevTestLabprovedor de recursos. - Get-AzRoleDefinition: lista todas as ações permitidas para a função de usuário do DevTest Labs .
- New-AzRoleDefinition: cria a nova função personalizada colaborador de política .
- New-AzRoleAssignment: atribui a função personalizada ao usuário especificado no escopo especificado.
# Values to change
$subscriptionId = "<Azure subscription ID>"
$rgName = "<Lab resource group name>"
$labName = "<Lab name>"
$userDisplayName = "<User display name in Microsoft Entra ID>"
# List all the operations for a resource provider.
Get-AzProviderOperation -OperationSearchString "Microsoft.DevTestLab/*"
# List allowed actions for a role.
(Get-AzRoleDefinition "DevTest Labs User").Actions
# Create the custom role.
$policyRoleDef = (Get-AzRoleDefinition "DevTest Labs User")
$policyRoleDef.Id = $null
$policyRoleDef.Name = "Policy Contributor"
$policyRoleDef.IsCustom = $true
$policyRoleDef.AssignableScopes.Clear()
$policyRoleDef.AssignableScopes.Add("/subscriptions/" + $subscriptionId)
$policyRoleDef.Actions.Add("Microsoft.DevTestLab/labs/policySets/policies/*")
$policyRoleDef = (New-AzRoleDefinition -Role $policyRoleDef)
# Retrieve the user object.
$adObject = Get-AzADUser -SearchString $userDisplayName
# Create the role assignment.
$scope = '/subscriptions/' + $subscriptionId + '/resourceGroups/' + $rgName + '/providers/Microsoft.DevTestLab/labs/' + $labName + '/policySets/default/policies/*'
New-AzRoleAssignment -ObjectId $adObject.Id -RoleDefinitionName "Policy Contributor" -Scope $scope
Definir tamanhos de VM permitidos
Este script de exemplo do PowerShell define os tamanhos permitidos para a criação de VMs de laboratório. Forneça as informações que o script chama quando solicitado.
- Get-AzResource: obtém os recursos de políticas de laboratório e laboratório.
- Set-AzResource: atualiza a política de tamanho da VM do laboratório.
- New-AzResource: cria uma nova política de tamanho de VM de laboratório.
param (
[Parameter(Mandatory=$true, HelpMessage="The name of the DevTest Lab to update")]
[string] $DevTestLabName,
[Parameter(Mandatory=$true, HelpMessage="The array of VM sizes to add")]
[Array] $SizesToAdd
)
function Get-Lab
{
$lab = Get-AzResource -ResourceType 'Microsoft.DevTestLab/labs' -Name $DevTestLabName
if(!$lab)
{
throw "Lab named $DevTestLabName was not found"
}
return $lab
}
function Get-PolicyChanges ($lab)
{
#start by finding the existing policy
$script:labResourceName = $lab.Name + '/default'
$existingPolicy = (Get-AzResource -ResourceType 'Microsoft.DevTestLab/labs/policySets/policies' -Name $labResourceName -ResourceGroupName $lab.ResourceGroupName -ApiVersion 2016-05-15) | Where-Object {$_.Name -eq 'AllowedVmSizesInLab'}
if($existingPolicy)
{
$existingSizes = $existingPolicy.Properties.threshold
$savePolicyChanges = $false
}
else
{
$existingSizes = ''
$savePolicyChanges = $true
}
if($existingPolicy.Properties.threshold -eq '[]')
{
Write-Output "Skipping $($lab.Name) because it currently allows all sizes"
return
}
# Make a list of all the current allowed sizes plus the `$SizesToAdd`.
$finalVmSizes = $existingSizes.Replace('[', '').Replace(']', '').Split(',',[System.StringSplitOptions]::RemoveEmptyEntries)
foreach($vmSize in $SizesToAdd)
{
$quotedSize = '"' + $vmSize + '"'
if(!$finalVmSizes.Contains($quotedSize))
{
$finalVmSizes += $quotedSize
$savePolicyChanges = $true
}
}
if(!$savePolicyChanges)
{
Write-Output "No policy changes required for VMSize in lab $($lab.Name)"
}
return @{
existingPolicy = $existingPolicy
savePolicyChanges = $savePolicyChanges
finalVmSizes = $finalVmSizes
}
}
function Set-PolicyChanges ($lab, $policyChanges)
{
if($policyChanges.savePolicyChanges)
{
$thresholdValue = ('[' + [String]::Join(',', $policyChanges.finalVmSizes) + ']')
$policyObj = @{
subscriptionId = $lab.SubscriptionId
status = 'Enabled'
factName = 'LabVmSize'
resourceGroupName = $lab.ResourceGroupName
labName = $lab.Name
policySetName = 'default'
name = $lab.Name + '/default/allowedvmsizesinlab'
threshold = $thresholdValue
evaluatorType = 'AllowedValuesPolicy'
}
$resourceType = "Microsoft.DevTestLab/labs/policySets/policies/AllowedVmSizesInLab"
if($policyChanges.existingPolicy)
{
Write-Output "Updating $($lab.Name) VM Size policy"
Set-AzResource -ResourceType $resourceType -ResourceName $labResourceName -ResourceGroupName $lab.ResourceGroupName -ApiVersion 2016-05-15 -Properties $policyObj -Force
}
else
{
Write-Output "Creating $($lab.Name) VM Size policy"
New-AzResource -ResourceType $resourceType -ResourceName $labResourceName -ResourceGroupName $lab.ResourceGroupName -ApiVersion 2016-05-15 -Properties $policyObj -Force
}
}
}
$lab = Get-Lab
$policyChanges = Get-PolicyChanges $lab
Set-PolicyChanges $lab $policyChanges
Adicionar uma imagem do Marketplace a um laboratório
Este script de exemplo do PowerShell adiciona uma imagem do Marketplace às imagens base disponíveis para a criação da VM de laboratório. Forneça as informações que o script chama quando solicitado.
O script usa os seguintes comandos:
- Get-AzResource: obtém recursos de imagem de galeria, laboratório e política de laboratório.
- Set-AzResource: modifica a política de imagem do Marketplace do laboratório existente.
- New-AzResource: cria uma nova política de imagem do Marketplace do laboratório.
param (
[Parameter(Mandatory=$true, HelpMessage="The name of the DevTest Lab to update")]
[string] $DevTestLabName,
[Parameter(Mandatory=$true, HelpMessage="The array of Marketplace image names to enable")]
[Array] $ImagesToAdd
)
function Get-Lab
{
$lab = Get-AzResource -ResourceType 'Microsoft.DevTestLab/labs' -Name $DevTestLabName
if(!$lab)
{
throw "Lab named $DevTestLabName was not found"
}
return $lab
}
function Get-PolicyChanges ($lab)
{
#start by finding the existing policy
$script:labResourceName = $lab.Name + '/default'
$existingPolicy = (Get-AzResource -ResourceType 'Microsoft.DevTestLab/labs/policySets/policies' -Name $labResourceName -ResourceGroupName $lab.ResourceGroupName -ApiVersion 2016-05-15) | Where-Object {$_.Name -eq 'GalleryImage'}
if($existingPolicy)
{
$existingImages = [Array] (ConvertFrom-Json $existingPolicy.Properties.threshold)
$savePolicyChanges = $false
}
else
{
$existingImages = @()
$savePolicyChanges = $true
}
if($existingPolicy.Properties.threshold -eq '[]')
{
Write-Output "Skipping $($lab.Name) because it currently allows all marketplace images"
return
}
$allAvailableImages = Get-AzResource -ResourceType Microsoft.DevTestLab/labs/galleryImages -Name $lab.Name -ResourceGroupName $lab.ResourceGroupName -ApiVersion 2017-04-26-preview
$finalImages = $existingImages
# loop through the requested images and add them to the finalImages list if they aren't already there
foreach($image in $ImagesToAdd)
{
$imageObject = $allAvailableImages | Where-Object {$_.Name -eq $image}
if(!$imageObject)
{
throw "Image $image is not available in the lab"
}
$addImage = $true
$parsedAvailableImage = $imageObject.Properties.imageReference
foreach($finalImage in $finalImages)
{
# determine whether or not the requested image is already allowed in this lab
$parsedFinalImg = ConvertFrom-Json $finalImage
if($parsedFinalImg.offer -eq $parsedAvailableImage.offer -and $parsedFinalImg.publisher -eq $parsedAvailableImage.publisher -and $parsedFinalImg.sku -eq $parsedAvailableImage.sku -and $parsedFinalImg.osType -eq $parsedAvailableImage.osType -and $parsedFinalImg.version -eq $parsedAvailableImage.version)
{
$addImage = $false
break
}
}
if($addImage)
{
Write-Output " Adding image $image to the lab"
$finalImages += ConvertTo-Json $parsedAvailableImage -Compress
$savePolicyChanges = $true
}
}
if(!$savePolicyChanges)
{
Write-Output "No policy changes required for allowed Marketplace Images in lab $($lab.Name)"
}
return @{
existingPolicy = $existingPolicy
savePolicyChanges = $savePolicyChanges
finalImages = $finalImages
}
}
function Set-PolicyChanges ($lab, $policyChanges)
{
if($policyChanges.savePolicyChanges)
{
$thresholdValue = '["'
for($i = 0; $i -lt $policyChanges.finalImages.Length; $i++)
{
$value = $policyChanges.finalImages[$i]
if($i -ne 0)
{
$thresholdValue = $thresholdValue + '","'
}
$thresholdValue = $thresholdValue + $value.Replace('"', '\"')
}
$thresholdValue = $thresholdValue + '"]'
$policyObj = @{
status = 'Enabled'
factName = 'GalleryImage'
threshold = $thresholdValue
evaluatorType = 'AllowedValuesPolicy'
}
$resourceType = "Microsoft.DevTestLab/labs/policySets/policies/galleryimage"
if($policyChanges.existingPolicy)
{
Write-Output "Updating $($lab.Name) Marketplace Images policy"
Set-AzResource -ResourceType $resourceType -ResourceName $labResourceName -ResourceGroupName $lab.ResourceGroupName -ApiVersion 2017-04-26-preview -Properties $policyObj -Force
}
else
{
Write-Output "Creating $($lab.Name) Marketplace Images policy"
New-AzResource -ResourceType $resourceType -ResourceName $labResourceName -ResourceGroupName $lab.ResourceGroupName -ApiVersion 2017-04-26-preview -Properties $policyObj -Force
}
}
}
$lab = Get-Lab
$policyChanges = Get-PolicyChanges $lab
Set-PolicyChanges $lab $policyChanges
Criar uma imagem personalizada a partir de um arquivo VHD
Este script de exemplo do PowerShell cria uma imagem personalizada do DevTest Labs de um arquivo VHD usando um modelo de implantação do repositório de modelos do DevTest Labs público. Esse script requer um arquivo VHD do Windows carregado na conta de Armazenamento do Azure do laboratório.
Para usar o script, substitua os valores de parâmetro no # Values to change comentário por seus próprios valores. Você pode obter os valores subscriptionId, labRg e labName da página principal do laboratório no portal do Azure. Obtenha o vhdUri do contêiner de Armazenamento do Azure em que você carregou o arquivo VHD.
Este script usa os seguintes comandos:
- Get-AzResource: obtém os recursos de conta de armazenamento e laboratório no laboratório.
- Get-AzStorageAccountKey: obtém as chaves de acesso da conta de armazenamento do laboratório.
- New-AzResourceGroupDeployment: implanta a imagem personalizada e o grupo de recursos com base no modelo.
# Values to change
$subscriptionId = '<Azure subscription ID>'
$labRg = '<Lab resource group name>'
$labName = '<Lab name>'
$vhdUri = '<URI for the uploaded VHD>'
$customImageName = '<Name for the custom image>'
$customImageDescription = '<Description for the custom image>'
# Select the Azure subscription.
Select-AzSubscription -SubscriptionId $subscriptionId
# Get the lab object.
$lab = Get-AzResource -ResourceId ('/subscriptions/' + $subscriptionId + '/resourceGroups/' + $labRg + '/providers/Microsoft.DevTestLab/labs/' + $labName)
# Get the lab storage account and lab storage account key values.
$labStorageAccount = Get-AzResource -ResourceId $lab.Properties.defaultStorageAccount
$labStorageAccountKey = (Get-AzStorageAccountKey -ResourceGroupName $labStorageAccount.ResourceGroupName -Name $labStorageAccount.ResourceName)[0].Value
# Set up the parameters object.
$parameters = @{existingLabName="$($lab.Name)"; existingVhdUri=$vhdUri; imageOsType='windows'; isVhdSysPrepped=$false; imageName=$customImageName; imageDescription=$customImageDescription}
# Create the custom image.
New-AzResourceGroupDeployment -ResourceGroupName $lab.ResourceGroupName -Name CreateCustomImage -TemplateUri 'https://raw.githubusercontent.com/Azure/azure-devtestlab/master/samples/DevTestLabs/QuickStartTemplates/201-dtl-create-customimage-from-vhd/azuredeploy.json' -TemplateParameterObject $parameters