Product Documentation

Exemple : créer un catalogue

Oct 21, 2016

L'exemple suivant illustre comment créer un catalogue pour un ensemble de machines Machine Creation Services (MCS).

Avant de commencer, suivez les étapes détaillées dans Mise en route avec le SDK de XenDesktop. Ce document vous montre comment utiliser Studio pour réaliser l'opération pour laquelle vous voulez générer un script (dans ce cas, pour créer un catalogue pour un ensemble de machines Machine Creation Services) et collecter le journal des opérations SDK créé par Studio pour effectuer la tâche. Ce résultat peut ensuite être personnalisé pour produire un script pour automatiser la création d'un catalogue.

Remarque : pour vous assurer que vous obtiendrez toujours les dernières améliorations et correctifs, Citrix vous recommande de suivre la procédure décrite dans ce document, plutôt que de copier et de coller le script exemple. Des numéros de ligne et sauts de ligne ont été ajoutés au script pour améliorer sa lisibilité.

Compréhension du script

La section suivante décrit la fonction de chaque partie du script généré par Studio. Ceci vous aidera à la personnalisation de votre propre script. Des numéros de ligne ont été ajoutés pour améliorer la lisibilité.

1. Start-LogHighLevelOperation -AdminAddress 'ddc.dumdev.internal.citrix.com:80' -Source 'Studio' -StartTime 29/05/2013 14:43:08 -Text 'Create Machine Catalog `'ExampleMachines`''

Démarre une opération de journalisation et renvoie un ID de journal qui est fourni pour les opérations suivantes pour les associer à une tâche plus importante.

2. New-BrokerCatalog -AdminAddress 'ddc.dumdev.internal.citrix.com:80' -AllocationType 'Permanent' -Description 'Example Machines' -IsRemotePC $False -LoggingId f39a2792-064a-43eb-97c7-397cc1238e46 -MinimumFunctionalLevel 'L7' -Name 'ExampleMachines' -PersistUserChanges 'OnPvd' -ProvisioningType 'MCS' -Scope @() -SessionSupport 'SingleSession'

Crée un catalogue de Broker. Ce catalogue est rempli avec des machines qui sont sur le point d'être créées.

3. New-AcctIdentityPool -AdminAddress 'ddc.dumdev.internal.citrix.com:80' -AllowUnicode -Domain 'dumdev.internal.citrix.com' -IdentityPoolName 'ExampleMachines' -LoggingId f39a2792-064a-43eb-97c7-397cc1238e46 -NamingScheme 'Example-####' -NamingSchemeType 'Numeric' -OU 'OU=DUM VMs,DC=dumdev,DC=internal,DC=citrix,DC=com' -Scope @()

Crée un regroupement d'identité. Ceci définit le mécanisme de création de comptes d'ordinateurs Active Directory. Ceci devient un conteneur pour les comptes Active Directory créés pour les machines devant être créées.

4. Set-BrokerCatalogMetadata -AdminAddress 'ddc.dumdev.internal.citrix.com:80' -CatalogId 1 -LoggingId f39a2792-064a-43eb-97c7-397cc1238e46 -Name 'Citrix_DesktopStudio_IdentityPoolUid' -Value 'b99aee6d-8772-4dbc-978b-8eb9a26e2407'

Définit les métadonnées sur le catalogue du Broker avec les détails du regroupement d'identité. Ceci n'est pas essentiel.

5. Test-ProvSchemeNameAvailable -AdminAddress 'ddc.dumdev.internal.citrix.com:80' -ProvisioningSchemeName @('ExampleMachines') 

Vérifie que le nom requis est disponible. Ceci n'est pas essentiel.

6. New-ProvScheme -AdminAddress 'ddc.dumdev.internal.citrix.com:80' -CleanOnBoot -HostingUnitName 'SharedNFS' -IdentityPoolName 'ExampleMachines' -LoggingId f39a2792-064a-43eb-97c7-397cc1238e46 -MasterImageVM 'XDHyp:\hostingunits\SharedNFS\BaseVM.vm\Base OS, domain joined and activated.snapshot \Pre-reqs installed.snapshot\Updates Applied.snapshot\VDA75-no agent.snapshot\Updated Agent.snapshot' -NetworkMapping @{0='xdhyp:\hostingunits\SharedNFS\Network 0.network'} -PersonalVDiskDriveLetter P -PersonalVDiskDriveSize 10 -ProvisioningSchemeName 'ExampleMachines' -RunAsynchronously -Scope @() -UsePersonalVDiskStorage -VMCpuCount 1 -VMMemoryMB 1024

Crée un objet du système de provisioning. Ceci est un modèle pour les machines à créer. Il spécifie l'hyperviseur, le réseau, le stockage, la mémoire, le nombre de processeurs à utiliser, etc. Il accepte les paramètres du système déjà configuré, telles que le nom et le chemin d'accès HostingUnit à l'instantané de MV à utiliser pour les machines à créer. Cette commande effectue une copie « consolidée » de l'instantané de MV utilisé et, par conséquent, l'opération peut prendre un certain temps.

Dans cet exemple, le script Studio spécifiait le drapeau -RunAsyncronous sur cette commande. Cela signifie que la commande retourne le contrôle à l'administrateur avant qu'elle ne se termine, vous devez attendre qu'elle se termine avant d'effectuer les opérations qui requièrent qu'elle soit terminée. Si ce drapeau n’est pas spécifié, la commande s'exécute de manière synchrone en ligne et le contrôle n'est pas retourné jusqu'à ce que la commande se termine (réussie ou non). Vous pouvez vérifier l'état d'une tâche asynchrone à l'aide de l'applet de commande Get-ProvTask. Entrez l'ID de tâche retourné par l'opération qui a démarré la tâche ; dans ce cas, l'applet de commande New-ProvScheme.

7. Set-BrokerCatalog -AdminAddress 'ddc.dumdev.internal.citrix.com:80' -LoggingId f39a2792-064a-43eb-97c7-397cc1238e46 -Name 'ExampleMachines' -ProvisioningSchemeId 76125e3a-9001-4993-86b6-eefc85c87880

Met à jour le BrokerCatalog avec l'ID unique du système de provisioning créé ci-dessus.

8. Add-ProvSchemeControllerAddress -AdminAddress 'ddc.dumdev.internal.citrix.com:80' -ControllerAddress @('DDC.dumdev.internal.citrix.com') -LoggingId f39a2792-064a-43eb-97c7-397cc1238e46 -ProvisioningSchemeName 'ExampleMachines' 

Ajoute un ensemble d'adresses de contrôleur pour l'objet du système de provisioning. Ceci est une liste d’adresses que les machines créées peuvent utiliser pour s'enregistrer auprès d'un Contrôleur (broker) lorsqu’il est déployé. Les adresses d'enregistrement de machines peuvent être fournies dans de nombreuses façons ; cependant, cette information est obligatoire si l'administrateur souhaite utiliser l'option « Autoriser Machine Creation Service pour fournir ceci » dans le programme d'installation du VDA. Les modifications apportées à cette liste affectent uniquement les machines créées après la modification, et non pas les machines existantes.

9. Get-AcctADAccount -AdminAddress 'ddc.dumdev.internal.citrix.com:80' -IdentityPoolUid b99aee6d-8772-4dbc-978b-8eb9a26e2407 -Lock $False -MaxRecordCount 2147483647 -State 'Available'

Studio obtient une liste des identités de machines disponibles depuis le regroupement d’identité afin que, si des comptes existants ont été créés dans le passé, mais non utilisés, ils peuvent être utilisés au lieu de créer de nouveaux comptes. Notez que ce n'est pas requis dans un script car de nouveaux comptes peuvent être créés à la place, étant donné que le script s'exécute dans un contexte qui dispose des permissions nécessaires pour effectuer cette opération. Toutefois, si le script ne dispose pas des permissions nécessaires pour créer des comptes, modifiez le script pour qu'il utilise les comptes disponibles (un processus distinct sera nécessaire pour fournir un regroupement de comptes dans le regroupement d’identité, avant d'exécuter le script).

10. New-AcctADAccount -AdminAddress 'ddc.dumdev.internal.citrix.com:80' -Count 2 -IdentityPoolUid b99aee6d-8772-4dbc-978b-8eb9a26e2407 -LoggingId f39a2792-064a-43eb-97c7-397cc1238e46

Crée les comptes d'ordinateurs Active Directory dans Active Directory. Le script crée un compte et, si nécessaire, il peut en créer plus à l'aide du paramètre « Nombre » de la commande. Les comptes sont créés dans l'unité d'organisation définie dans le système de provisioning créé ci-dessus.

11. New-ProvVM -ADAccountName @('DUMDEV\Example-0001$','DUMDEV\Example-0002$') -AdminAddress 'ddc.dumdev.internal.citrix.com:80' -LoggingId f39a2792-064a-43eb-97c7-397cc1238e46 -ProvisioningSchemeName 'ExampleMachines' -RunAsynchronously

Crée des machines virtuelles, basées sur la définition du modèle dans le système de provisioning créé ci-dessus. Ce processus peut prendre plusieurs minutes pour se terminer.

12. Lock-ProvVM -AdminAddress 'ddc.dumdev.internal.citrix.com:80' -LoggingId f39a2792-064a-43eb-97c7-397cc1238e46 -ProvisioningSchemeName 'ExampleMachines' -Tag 'Brokered' -VMID @('0710bb77-d01f-d006-4d67-5472e5cd349f')

Verrouille les machines virtuelles provisionnées et empêche la modification accidentelle de la machine virtuelle. Les consommateurs du Kit de développement logiciel (SDK) peuvent utiliser ceci pour indiquer que la machine virtuelle est en cours d’utilisation et expliquer la raison pour laquelle elle est verrouillée. Le script verrouille la machine virtuelle avec une balise « Brokered » pour indiquer que la machine virtuelle est créée et ajoutée à un catalogue de Broker et ne doit pas être supprimé sans être d'abord supprimé du catalogue. Vous pouvez définir le nom de la balise sur ce qui est requis.

13. New-BrokerMachine -AdminAddress 'ddc.dumdev.internal.citrix.com:80' -CatalogUid 1 -HostedMachineId '0710bb77-d01f-d006-4d67-5472e5cd349f' -HypervisorConnectionUid 1 -LoggingId f39a2792-064a-43eb-97c7-397cc1238e46 -MachineName 'S-1-5-21-3918710733-2340574387-1999698698-109114'

Créez un objet machine de Broker. Ces objets sont stockés dans le catalogue qui joint la machine provisionnée au catalogue.

14. Start-BrokerMachinePvdImagePrepare -AdminAddress 'ddc.dumdev.internal.citrix.com:80' -InputObject @(2) -LoggingId f39a2792-064a-43eb-97c7-397cc1238e46

Demande l'initiation d'une opération de préparation du Personal vDisk par le service Broker. Ceci est requis pour permettre à la machine d'initialiser le stockage du Personal vDisk.

15. Stop-LogHighLevelOperation -AdminAddress 'ddc.dumdev.internal.citrix.com:80' -HighLevelOperationId f39a2792-064a-43eb-97c7-397cc1238e46 -IsSuccessful $true

Arrête l'opération de journalisation commencée lors de la première étape et indique qu'elle a réussie.

Personnaliser le script

La section suivante illustre comment convertir et adapter la sortie Studio dans un script plus lisible. Outre l'utilisation de variables et de la suppression des commandes qui ne sont pas requises, elle illustre comment ajouter la création de machines dans une boucle de sorte que vous pouvez contrôler le nombre de machines créées. Des numéros de ligne ont été ajoutés pour améliorer la lisibilité.

 1. [CmdletBinding()] param ( [Parameter(Mandatory=$true)] [string] $hostingUnitPath, [Parameter(Mandatory=$true)] [string] $catalogName, [string] $catalogDescription, [Parameter(Mandatory=$true)] [int] $numVmsToCreate, [string] $adminAddress, [Parameter(Mandatory=$true)] [string] $namingScheme, [string] $OU, [Parameter(Mandatory=$true)] [string] $domain, [Parameter(Mandatory=$true)] [string] $masterImagePath ) 2. Set-HypAdminConnection -AdminAddress $adminAddress 3. $hostingUnit = get-item $hostingUnitPath 4. $hostConnection = $hostingUnit.hypervisorConnection 5. $brokerHypConnection = Get-BrokerHypervisorConnection -HypHypervisorConnectionUid $hostConnection.HypervisorConnectionUid 6. # Démarrer opération journalisée 7. $loggingOp = Start-LogHighLevelOperation -AdminAddress $adminAddress -Source 'Scripted' -Text "Create Machine Catalog `'$catalogName`'" 8. $loggingId = $loggingOp.Id 9. # Créer le catalogue de broker et le pool de comptes AD Identity 10. $catalog = New-BrokerCatalog -AllocationType 'Permanent' -Description $catalogDescription -IsRemotePC $False -MinimumFunctionalLevel 'L7' -Name $catalogName -PersistUserChanges 'OnPvd' -ProvisioningType 'MCS' -Scope @() -SessionSupport 'SingleSession' -LoggingId $loggingId -AdminAddress $adminAddress 11. $adPool = New-AcctIdentityPool -IdentityPoolName $catalogName -NamingScheme $namingScheme -NamingSchemeType 'Numeric' -OU $OU -Domain $domain -AllowUnicode -LoggingId $loggingId -AdminAddress $adminAddress 12. Set-BrokerCatalogMetadata -CatalogId $catalog.Uid -Name 'Citrix_DesktopStudio_IdentityPoolUid' -Value $adPool.IdentityPoolUid -LoggingId $loggingId -AdminAddress $adminAddress 13. ################################################################### 14. # Créer le ProvisioningScheme et attendre qu'il se termine (en indiquant la progression) 15. $provSchemeTaskID = New-ProvScheme -ProvisioningSchemeName $catalogName -HostingUnitUID $hostingUnit.HostingUnitUID -IdentityPoolUID $adpool.IdentityPoolUid -CleanOnBoot -MasterImageVM $masterImagePath -UsePersonalVDiskStorage -PersonalVDiskDriveLetter P -PersonalVDiskDriveSize 10 -RunAsynchronously -LoggingId $loggingId -AdminAddress $adminAddress 16. $ProvTask = get-provTask -TaskID $provSchemeTaskID -AdminAddress $adminAddress 17. $taskProgress = 0 18. write-host "Creating New ProvScheme" 19. while ($provTask.Active -eq $true) 20. { 21. # intercepter une progression de tâche non initialisée, cela se produit jusqu'à ce que le produit initialise la valeur 22. try {$totalPercent = if ($provTask.TaskProgress){$provTask.TaskProgress} else {0}} catch {} 23. Write-Progress -activity "Creating Provisioning Scheme:" -status "$totalPercent% Complete:" -percentcomplete $totalPercent 24. sleep 30 25. $ProvTask = get-provTask -TaskID $provSchemeTaskID -AdminAddress $adminAddress 26. } 27. write-host "New ProvScheme Creation Finished" 28. $provScheme = get-provScheme -ProvisioningSchemeUID $provTask.ProvisioningSchemeUid 29. $controllers = Get-BrokerController | select DNSName 30. Add-ProvSchemeControllerAddress -ProvisioningSchemeUID $provScheme.ProvisioningSchemeUID -ControllerAddress $controllers -LoggingId $loggingId -AdminAddress $adminAddress 31. ################################################################### 32. # Définir l'ID de schéma de provisioning pour le catalogue de broker 33. Set-BrokerCatalog -InputObject $catalog -ProvisioningSchemeId $provTask.ProvisioningSchemeUid -LoggingId $loggingId -AdminAddress $adminAddress 34. ################################################################### 35. # Créer les comptes AD requis, puis créer les machines virtuelles (en indiquant la progression) 36. $accts = New-AcctADAccount -IdentityPoolUid $adPool.IdentityPoolUid -Count $numVMsToCreate -LoggingId $loggingId -AdminAddress $adminAddress 37. $provVMTaskID = New-ProvVM -ProvisioningSchemeUID $provScheme.ProvisioningSchemeUID -ADAccountName $accts.SuccessfulAccounts -RunAsynchronously -LoggingId $loggingId -AdminAddress $adminAddress 38. # Attendre que les VM terminent le provisioning 39. $ProvTask = get-provTask -TaskID $provVMTaskID -AdminAddress $adminAddress 40. while ($provTask.Active -eq $true) 41. { 42. # intercepter une progression de tâche non initialisée, cela se produit jusqu'à ce que le produit initialise la valeur 43. try {$totalPercent = if ($provTask.TaskProgress){$provTask.TaskProgress} else {0}} catch {} 44. Write-Progress -activity "Creating Machines:" -status "$totalPercent% Complete:" -percentcomplete $totalPercent 45. sleep 5 46. $ProvTask = get-provTask -TaskID $provVMTaskID -AdminAddress $adminAddress 47. } 48. write-host "VM Creation Finished" 49. # Verrouiller les VM et les ajouter au catalogue de broker 50. $provisionedVMs = get-ProvVM -ProvisioningSchemeUID $provScheme.ProvisioningSchemeUID -AdminAddress $adminAddress 51. $provisionedVMs | Lock-ProvVM -ProvisioningSchemeUID $provScheme.ProvisioningSchemeUID -Tag 'Brokered' -LoggingId $loggingId -AdminAddress $adminAddress 52. $provisionedVMs | ForEach-Object {New-BrokerMachine -CatalogUid $catalog.UID -HostedMachineId $_.VMId -HypervisorConnectionUid $brokerHypConnection.UID -MachineName $_.ADAccountSid -LoggingId $loggingId -AdminAddress $adminAddress} 53. Stop-LogHighLevelOperation -IsSuccessful $true -HighLevelOperationId $loggingId -AdminAddress $adminAddress