Product Documentation

Beispiel: Erstellen eines Katalogs

Sep 29, 2015

Das folgende Beispiel zeigt, wie ein Katalog für eine Gruppe von Maschinenerstellungsdienste-Maschinen erstellt wird.

Bevor Sie beginnen, stellen Sie sicher, dass Sie die in Erste Schritte mit dem SDK aufgeführten Schritte ausführen. In diesem Abschnitt wird dargestellt, wie Sie Studio für die Durchführung des Vorgangs verwenden, für den Sie ein Skript erstellen möchten (in diesem Fall das Erstellen eines Katalogs für eine Gruppe von Maschinenerstellungsdienste-Maschinen) und das Sammeln des Protokolls der SDK-Vorgänge, die Studio für das Ausführung der Aufgabe vorgenommen hat. Die Ausgabe kann dann so angepasst werden, dass ein Skript für die Automatisierung der Katalogerstellung erstellt wird.

Hinweis: Um sicherzustellen, dass Sie immer die aktuellen Verbesserungen und Fixes erhalten, empfiehlt Citrix, dass Sie den in diesem Abschnitt beschriebenen Schritten folgen, anstatt das Beispielskript zu kopieren und einzufügen. Zeilennummern und Zeilenumbrüche wurden dem Skript für eine bessere Lesbarkeit hinzugefügt.

Inhalt des Skripts

Im folgenden Abschnitt wird die Funktion jedes Teils des Skripts erläutert, das Studio erstellt. Dies hilft Ihnen bei der Anpassung des eigenen Skripts. Zeilennummern wurden für eine bessere Lesbarkeit hinzugefügt.

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

Startet einen protokollierten Vorgang und gibt eine Protokoll-ID zurück, die an nachfolgende Vorgänge übergeben wird, um sie der größeren Task zuzuordnen.

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'

Erstellt einen Brokerkatalog. Dieser Katalog enthält Maschinen, die Sie gerade erstellen.

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 @()

Erstellt einen Identitätspool. Definiert den Mechanismus zum Erstellen von Active Directory-Computerkonten. Dies wird zu einem Container für Active Directory-Konten, die für die Maschinen erstellt werden, die Sie erstellen.

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'

Stellt Metadaten im Brokerkatalog ein, die Details des Identitätspool enthalten. Dies ist nicht unbedingt erforderlich.

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

Überprüft, ob der gewünschte Name verfügbar ist. Dies ist nicht unbedingt erforderlich.

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

Erstellt ein Bereitstellungsschema-Objekt. Dies ist eine Vorlage für die Maschinen, die Sie erstellen möchten. Sie gibt den Hypervisor, das Netzwerk, den Speicher, den Speicherplatz, die Anzahl der CPUs usw. an. Sie übernimmt Parameter vom bereits eingerichteten System, u. a. den Namen des Hostinggeräts und den Pfad zum VM-Snapshot, die für die Maschinen verwendet werden, die Sie erstellen. Dieser Befehl erstellt eine konsolidierte Kopie des verwendeten VM-Snapshots, daher kann der Abschluss des Prozesses länger dauern.

In diesem Beispiel gibt das Studio-Skript das Flag -RunAsyncronous in diesem Befehl an. Dies bedeutet, dass der Befehl vor dem Abschluss die Steuerung an den Administrator zurückgibt; Sie müssen daher auf den Abschluss warten, bevor Sie Vorgänge durchführen, für die der Befehl abgeschlossen sein muss. Wenn dieses Flag nicht angegeben ist, wird der Befehl synchron intern ausgeführt und die Steuerung wird nicht zurückgegeben, bis der Befehl abgeschlossen ist (erfolgreich oder fehlerhaft). Sie können den Status einer asynchronen Task mit dem Cmdlet Get-ProvTask überprüfen. Geben Sie die Task-ID an, die der Vorgang zurückgegeben hat, der die Task gestartet hat, in diesem Fall das Cmdlet 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

Aktualisiert den Brokerkatalog mit der eindeutigen ID des oben erstellten Provisioningschemas.

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

Fügt dem Provisioningschema-Objekt eine Gruppe von Controlleradressen hinzu. Dies ist eine Liste von Adressen, die die erstellten Maschinen für die Registrierung bei einem Controller (Broker) verwenden können, wenn sie bereitgestellt werden. Die Registrierungsadressen der Maschinen können mit mehreren Methoden angegeben werden. Diese Informationen sind jedoch erforderlich, wenn der Administrator im VDA-Installationsprogramm die Adressen mit den Maschinenerstellungsdiensten angeben möchte. Änderungen an dieser Liste wirken sich nur auf Maschinen aus, die nach der Änderung erstellt werden, nicht auf vorhandene Maschinen.

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

Studio erhält eine Liste der verfügbaren Maschinen-IDs vom Identitätspool, damit vorhandene Konten, die nicht verwendet werden, verbraucht werden können statt neue Konten zu erstellen. Hinweis: Dies wird nicht im Skript benötigt, da neue Konten erstellt werden können, wenn das Skript in einem Kontext ausgeführt wird, der entsprechende Berechtigungen hat. Wenn das Skript jedoch keine Berechtigungen zum Erstellen von Konten hat, ändern Sie das Skript so, dass verfügbare Konten verbraucht werden (ein eigenständiger Prozess wird benötigt, um ein Pool der Konten dem Identitätspool bereitzustellen, bevor das Skript ausgeführt wird).

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

Erstellt die erforderlichen Active Directory-Computerkonten in Active Directory. Das Skript erstellt ein Konto und kann, falls erforderlich, weitere Konten mit dem Parameter "Count" des Befehls erstellen. Die Konten werden in der Organisationseinheit erstellt, die im obigen Provisioningschema festgelegt wurde.

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

Erstellt virtuelle Maschinen basierend auf der Vorlagendefinition im oben erstellten Provisioningschema. Der Abschluss dieses Prozesses kann länger dauern.

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')

Sperrt die bereitgestellten virtuellen Maschinen und verhindert versehentliche Modifikationen an der virtuellen Maschine. Consumer des SDKs können hiermit angeben, dass die virtuelle Maschine verwendet wird und den Grund für die Sperrung. Das Skript sperrt die VM mit einem Tag "Brokered". Dies gibt an, dass die virtuelle Maschine erstellt und dem Brokerkatalog hinzugefügt wurde und erst nach dem Entfernen aus dem Katalog gelöscht werden kann. Sie können den Tagnamen beliebig angeben.

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'

Erstellt ein Broker-Maschinenobjekt. Dies sind im Katalog gespeicherte Objekte, die die bereitgestellte Maschine mit dem Katalog zusammenführen.

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

Fordert den Brokerdienst auf, einen Vorbereitungsvorgang für Personal vDisk auszulösen. Dies ist erforderlich, damit die Maschine den Speicher für Personal vDisk initialisieren kann.

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

Beendet die Protokollierung, die im ersten Schritt begonnen wurde, und gibt einen Erfolg an.

Anpassen des Skripts

Im folgenden Abschnitt wird erläutert, wie Sie die Studio-Ausgabe in ein Skript konvertieren und anpassen, das besser verwendbar ist. Zusätzlich zur Verwendung von Variablen und dem Entfernen von nicht benötigten Befehlen erfahren Sie, wie Sie die Maschinenerstellung einer Schleife hinzufügen, damit Sie die Anzahl der erstellten Maschinen steuern können. Zeilennummern wurden für eine bessere Lesbarkeit hinzugefügt.

 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. # Start der Protokollierung 7. $loggingOp = Start-LogHighLevelOperation -AdminAddress $adminAddress -Source 'Scripted' -Text "Create Machine Catalog `'$catalogName`'" 8. $loggingId = $loggingOp.Id 9. # Erstellen Sie den Brokerkatalog und den Kontenpool für die AD-Identität 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. # Erstellen Sie das Provisioningschema und warten Sie, bis der Vorgang abgeschlossen ist (Fortschritt verfolgen) 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. # Erfassen Sie einen nicht initialisierten Aufgabenstatus; dies erfolgt, bis das Produkt den Wert initialisiert hat 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. # Legen Sie die Provisioningschema-ID für den Brokerkatalog fest 33. Set-BrokerCatalog -InputObject $catalog -ProvisioningSchemeId $provTask.ProvisioningSchemeUid -LoggingId $loggingId -AdminAddress $adminAddress 34. ################################################################### 35. # Erstellen die die erforderlichen AD-Konten und erstellen Sie dann die virtuellen Maschinen (Fortschritt verfolgen) 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. # Warten Sie, bis das Provisioning der VMs abgeschlossen ist 39. $ProvTask = get-provTask -TaskID $provVMTaskID -AdminAddress $adminAddress 40. while ($provTask.Active -eq $true) 41. { 42. # Erfassen Sie einen nicht initialisierten Aufgabenstatus; dies erfolgt, bis das Produkt den Wert initialisiert hat 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. # Sperren Sie die VMs und fügen Sie sie dem Brokerkatalog hinzu 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