Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article inclut les exemples de scripts Azure PowerShell suivants pour Azure DevTest Labs :
- Ajouter un utilisateur externe à un laboratoire
- Créer et attribuer un rôle personnalisé dans un labo
- Définir les tailles de machine virtuelle autorisées pour un labo
- Ajouter des images de Marketplace à un laboratoire
- Créer une image personnalisée à partir d’un disque dur virtuel (VHD)
Conditions préalables
- Pour ajouter ou attribuer des utilisateurs ou des rôles, vous avez besoin d’un rôle Propriétaire dans un labo, ou d’un rôle Propriétaire ou Administrateur de l’accès utilisateur dans l’abonnement Azure qui contient le labo.
- Pour définir des tailles de machine virtuelle lab autorisées, ajoutez une image de la Place de marché ou créez une image personnalisée, vous avez besoin d’au moins un rôle Contributeur dans le labo ou l’abonnement Azure.
- Tous les scripts nécessitent Azure PowerShell. Vous pouvez utiliser Azure Cloud Shell ou installer PowerShell localement.
- Dans Cloud Shell, sélectionnez l’environnement PowerShell .
- Pour une installation locale de PowerShell, exécutez
Update-Module -Name Azpour obtenir la dernière version d’Azure PowerShell et exécutez Connect-AzAccount pour vous connecter à Azure. Si vous avez plusieurs abonnements Azure, utilisez cette optionSet-AzContext -SubscriptionId "<SubscriptionId>"pour fournir l’ID d’abonnement que vous souhaitez utiliser.
Ajouter un utilisateur externe à un laboratoire
Cet exemple de script PowerShell ajoute un utilisateur externe à un laboratoire avec le rôle Utilisateur DevTest Labs . L’utilisateur à ajouter doit se trouver dans l’ID Microsoft Entra de l’organisation.
Pour utiliser le script, remplacez les valeurs de paramètre sous le # Values to change commentaire par vos propres valeurs. Vous pouvez obtenir les valeurs de subscriptionId, labResourceGroup, et labName de la page principale du laboratoire dans le portail Azure.
Ce script utilise les commandes suivantes :
- Get-AzADUser : obtient l’objet utilisateur à partir de l’ID Microsoft Entra.
- New-AzRoleAssignment : attribue le rôle Utilisateur DevTest Labs à l’utilisateur spécifié à l’étendue spécifiée.
# 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
Créer et attribuer un rôle d’utilisateur de laboratoire personnalisé
Cet exemple de script PowerShell crée un rôle personnalisé qui permet aux utilisateurs du labo de modifier des stratégies de laboratoire et affecte le rôle personnalisé à un utilisateur externe. L’utilisateur à attribuer le rôle doit se trouver dans l’ID Microsoft Entra de l’organisation.
Pour utiliser le script, remplacez les valeurs de paramètre sous le # Values to change commentaire par vos propres valeurs. Vous pouvez obtenir les valeurs de subscriptionId, rgName, et labName de la page principale du laboratoire dans le portail Azure.
Ce script utilise les commandes suivantes :
- Get-AzProviderOperation : répertorie toutes les opérations disponibles pour le
Microsoft.DevTestLabfournisseur de ressources. - Get-AzRoleDefinition : répertorie toutes les actions autorisées pour le rôle Utilisateur DevTest Labs .
- New-AzRoleDefinition : crée le rôle personnalisé Contributeur de stratégie.
- New-AzRoleAssignment : affecte le rôle personnalisé à l’utilisateur spécifié à l’étendue spécifiée.
# 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
Définir les tailles de machine virtuelle autorisées
Cet exemple de script PowerShell définit les tailles autorisées pour la création de machines virtuelles de laboratoire. Fournissez les informations demandées par le script lorsque vous y êtes invité.
- Get-AzResource : obtient les ressources de laboratoire et les politiques de laboratoire.
- Set-AzResource : met à jour la stratégie de taille de machine virtuelle lab.
- New-AzResource : crée une politique de taille de machine virtuelle de laboratoire.
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
Ajouter une image de marketplace à un laboratoire
Cet exemple de script PowerShell ajoute une image de la Place de marché aux images de base disponibles pour la création de machines virtuelles lab. Fournissez les informations demandées par le script lorsque vous y êtes invité.
Le script utilise les commandes suivantes :
- Get-AzResource : obtient les ressources d'images de laboratoire, de politique de laboratoire et de galerie.
- Set-AzResource: modifie la stratégie d’image Marketplace de laboratoire existante.
- New-AzResource: crée une nouvelle stratégie d’image Marketplace de laboratoire.
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
Créer une image personnalisée à partir d'un fichier VHD
Cet exemple de script PowerShell crée une image personnalisée DevTest Labs à partir d’un fichier VHD à l’aide d’un modèle de déploiement à partir du référentiel de modèles DevTest Labs public. Ce script nécessite un fichier VHD Windows téléchargé sur le compte de stockage Azure du laboratoire.
Pour utiliser le script, remplacez les valeurs de paramètre sous le # Values to change commentaire par vos propres valeurs. Vous pouvez obtenir les valeurs de subscriptionId, labRg, et labName de la page principale du laboratoire dans le portail Azure. Obtenez la vhdUri valeur depuis le conteneur Azure Storage où vous avez chargé le fichier VHD.
Ce script utilise les commandes suivantes :
- Get-AzResource : obtient les ressources du laboratoire et du compte de stockage du laboratoire.
- Get-AzStorageAccountKey : obtient les clés d’accès du compte de stockage lab.
- New-AzResourceGroupDeployment : déploie l’image personnalisée et le groupe de ressources en fonction du modèle.
# 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