Product Documentation

Ejemplo: Crear un catálogo

Nov 18, 2015

En el ejemplo siguiente se muestra cómo crear un catálogo para un conjunto de máquinas de Machine Creation Services (MCS).

Antes de comenzar, compruebe que sigue los pasos detallados en Introducción al SDK de XenDesktop. Este tema muestra cómo usar Studio para realizar la operación que desea incluir en el script (en este caso, crear un catálogo para un conjunto de máquinas de Machine Creation Services) y recopilar el registro de operaciones del SDK que realizó Studio para llevar a cabo la tarea. Este resultado puede personalizarse para generar un script que automatice la creación de catálogos.

Nota: Para asegurarse de que siempre obtiene las últimas mejoras y revisiones, Citrix recomienda seguir el procedimiento descrito en este tema en lugar de copiar y pegar el script de ejemplo. Se han agregado los números y los saltos de línea al script para una mejor legibilidad.

Entender el script

La siguiente sección explica qué hace cada parte del script generado por Studio. Esto le ayudará con la personalización de su propio script. Se han agregado números de línea para una mejor legibilidad.

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

Inicia una operación registrada y devuelve un ID de registro que se suministra a las siguientes operaciones para asociarlas a la tarea más grande.

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'

Crea un catálogo de broker. Este catálogo se rellena de máquinas que se van a crear.

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

Crea una agrupación de identidades. Esto define el mecanismo para crear cuentas de equipo de AD. Esto se convierte en un contenedor de cuentas de AD creadas para las máquinas que se van a crear.

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'

Establece los metadatos en el catálogo de broker con información de la agrupación de identidades. Esto no es fundamental.

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

Comprueba que el nombre solicitado está disponible. Esto no es fundamental.

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

Crea un objeto de esquema de aprovisionamiento. Esta es una plantilla para las máquinas que se van a crear. Especifica el hipervisor, la red, el almacenamiento, la memoria, la cantidad de CPU que se van a usar, etc. Toma los parámetros del sistema ya configurado, como el nombre de HostingUnit y la ruta a la instantánea de la VM que se va a utilizar para las máquinas que se van a crear. Este comando crea una copia "consolidada" de la instantánea de la VM que se va a usar y, como resultado, el proceso puede tardar algún tiempo en completarse.

En este ejemplo, el script de Studio ha especificado el indicador -RunAsyncronous en este comando. Esto significa que el comando devolverá el control al administrador antes de que se haya completado, de modo que debe esperar a que esta sesión finalice antes de realizar las operaciones que requieren que se complete. Si este indicador no se especifica, el comando se ejecuta de forma sincrónica en línea y el control no se devuelve hasta que se complete el comando (correcta o incorrectamente). Puede comprobar el estado de una tarea asincrónica mediante el cmdlet Get-ProvTask. Proporcione el ID de tarea devuelto por la operación que inició la tarea; en este caso, el 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

Actualiza el BrokerCatalog con el ID exclusivo del esquema de aprovisionamiento creado anteriormente.

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

Agrega un conjunto de direcciones de Controllers al objeto del esquema de aprovisionamiento. Esta es una lista de direcciones que las máquinas creadas pueden usar para registrarse con un Controller (broker) cuando se implementan. Las direcciones de registro de las máquinas pueden proporcionarse de muchas formas; sin embargo, esta información es necesaria si el administrador desea usar la opción "Allow Machine Creation Service to supply this" en la instalación del VDA. Los cambios en esta lista solo afectan a máquinas creadas después del cambio, no a las máquinas existentes.

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

Studio obtiene una lista de las identidades de máquina disponibles de la agrupación de identidades de modo que, si las cuentas existentes se han creado en el pasado pero no se utilizan, se puedan utilizar estas en lugar de crear cuentas nuevas. Tenga en cuenta que esto no es necesario en un script porque, en vez de eso, se pueden crear nuevas cuentas, siempre que el script se ejecute en un contexto que tenga los permisos necesarios para realizar esta acción. No obstante, si el script no dispone de permisos para crear cuentas, cambie el script para consumir las cuentas disponibles (se requerirá un proceso independiente para proporcionar un grupo de cuentas a la agrupación de identidades antes de ejecutar el 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

Crea las cuentas de equipo de AD necesarias en Active Directory. El script crea una cuenta pero, si es necesario, puede crear más mediante el parámetro "Recuento" del comando. Las cuentas se crean en la OU definida en el esquema de aprovisionamiento creado anteriormente.

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

Crea máquinas virtuales en función de la definición de plantilla en el esquema de aprovisionamiento creado anteriormente. Este proceso puede tardar algún tiempo en completarse.

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

Bloquea las máquinas virtuales aprovisionadas y evita la modificación accidental de la máquina virtual. Los consumidores del SDK pueden usar esto para indicar que la máquina virtual se está utilizando y por qué está bloqueada. El script bloquea la VM con la etiqueta "Con broker" para indicar que la máquina virtual se ha creado y se ha agregado a un catálogo de broker y no se debe eliminar sin quitarla primero del catálogo. Puede establecer el nombre de la etiqueta para lo que sea necesario.

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'

Crea un objeto de máquina de broker. Estos son objetos almacenados en el catálogo que une la máquina aprovisionada con el catálogo.

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

Solicita al Broker Service el inicio de una operación de preparación para el disco Personal vDisk. Esto es necesario para permitir que la máquina inicialice el almacenamiento del disco Personal vDisk.

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

Detiene la operación registrada iniciada en el primer paso e indica que se ha realizado correctamente.

Personalizar el script

La siguiente sección muestra cómo convertir y adaptar el resultado de Studio en un script más consumible. Además de utilizar variables y quitar los comandos que no sean necesarios, muestra cómo agregar la creación de máquinas en un bucle de modo que se pueda controlar la cantidad de máquinas creadas. Se han agregado números de línea para una mejor legibilidad.

 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. # Inicia operación registrada 7. $loggingOp = Start-LogHighLevelOperation -AdminAddress $adminAddress -Source 'Scripted' -Text "Create Machine Catalog `'$catalogName`'" 8. $loggingId = $loggingOp.Id 9. # Crea el catálogo de broker y la agrupación de cuentas de identidad AD 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. # Crea el esquema de aprovisionamiento ProvisioningScheme y espera a que se complete (con informe de progreso) 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. # Detecta el progreso de una tarea no inicializada; esto sucede hasta que el producto inicialice el valor 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. # Establece el ID del esquema de aprovisionamiento para el catálogo de broker 33. Set-BrokerCatalog -InputObject $catalog -ProvisioningSchemeId $provTask.ProvisioningSchemeUid -LoggingId $loggingId -AdminAddress $adminAddress 34. ################################################################### 35. # Crea las cuentas de AD necesarias y, a continuación, crea las máquinas virtuales (con informe de progreso) 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. # Espera a que las VM terminen el aprovisionamiento 39. $ProvTask = get-provTask -TaskID $provVMTaskID -AdminAddress $adminAddress 40. while ($provTask.Active -eq $true) 41. { 42. # Detecta el progreso de una tarea no inicializada; esto sucede hasta que el producto inicialice el valor 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. # Bloquea las VM y las agrega al catálogo 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