Product Documentation

Exemple : Créer un bureau PvD

Oct 21, 2016

Ce document offre un exemple de script qui crée un groupe de mise à disposition contenant des bureaux Personal vDisk (PvD).

Avant de commencer, suivez les étapes détaillées dans Mise en route avec le SDK de XenDesktop. Ce document illustre comment utiliser Studio pour réaliser l'opération que vous voulez scripter et collecter le journal des opérations SDK réalisées par Studio pour effectuer la tâche. Ce résultat peut ensuite être personnalisé pour produire un script pour automatiser la tâche.

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.

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 et sauts de ligne ont été ajoutés au script pour améliorer sa lisibilité.

1. Start-LogHighLevelOperation -AdminAddress 'test-ddc.mydomain.com:80' -Source 'Studio' -StartTime 31/07/2013 10:08:58 -Text 'Create Delivery Group `'Win7 PvD Desktops`''

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-BrokerDesktopGroup -AdminAddress 'test-ddc.mydomain.com:80' -ColorDepth 'TwentyFourBit' -DeliveryType 'DesktopsOnly' -DesktopKind 'Private' -InMaintenanceMode $False -IsRemotePC $False -LoggingId 846f2d42-a994-4bce-ab58-be05c8d73b99 -MinimumFunctionalLevel 'L7' -Name 'Win7 PvD Desktops' -OffPeakBufferSizePercent 10 -PeakBufferSizePercent 10 -PublishedName 'Win7 PvD Desktops' -Scope @() -SecureIcaRequired $False -SessionSupport 'SingleSession' -ShutdownDesktopsAfterUse $False -TimeZone 'GMT Standard Time'

Crée un nouveau groupe de mise à disposition avec les options collectées par l'assistant Studio.

3. Add-BrokerMachinesToDesktopGroup -AdminAddress 'test-ddc.mydomain.com:80' -Catalog 'win7-pvd' -Count 2 -DesktopGroup 'Win7 PvD Desktops' -LoggingId 846f2d42-a994-4bce-ab58-be05c8d73b99

Ajoute le nombre de machines requises depuis le catalogue nominé au nouveau groupe de mise à disposition.

4. Set-Variable -Name 'brokerUsers' -Value @('S-1-5-21-3291547628-200264090-930806513-1104','S-1-5-21-3291547628-200264090-930806513-1105') Get-BrokerUser -AdminAddress 'test-ddc.mydomain.com:80' -Filter {(SID -in $brokerUsers)} -MaxRecordCount 2147483647 Remove-Variable -Name 'brokerUsers' New-BrokerUser -AdminAddress 'test-ddc.mydomain.com:80' -Name 'MYDOMAIN\user1' New-BrokerUser -AdminAddress 'test-ddc.mydomain.com:80' -Name 'MYDOMAIN\user2'

Les commandes ci-dessus ne sont pas requises, Studio vérifie les utilisateurs.

5. Test-BrokerAssignmentPolicyRuleNameAvailable -AdminAddress 'test-ddc.mydomain.com:80' -Name @('Win7 PvD Desktops')

Studio vérifie que le nom d'attribution de la stratégie est disponible pour l'utilisation.

6. New-BrokerAssignmentPolicyRule -AdminAddress 'test-ddc.mydomain.com:80' -DesktopGroupUid 41 -Enabled $True -IncludedUserFilterEnabled $False -LoggingId 846f2d42-a994-4bce-ab58-be05c8d73b99 -MaxDesktops 1 -Name 'Win7 PvD Desktops'

Crée la nouvelle règle d'attribution de stratégie pour le groupe de mise à disposition. Aucun utilisateur n'est spécifié ici et tout contrôle est effectué au travers de la règle de stratégie d'accès.

7. Set-Variable -Name 'brokerUsers' -Value @('S-1-5-21-3291547628-200264090-930806513-1104','S-1-5-21-3291547628-200264090-930806513-1105') Get-BrokerUser -AdminAddress 'test-ddc.mydomain.com:80' -Filter {(SID -in $brokerUsers)} -MaxRecordCount 2147483647 Remove-Variable -Name 'brokerUsers' New-BrokerUser -AdminAddress 'test-ddc.mydomain.com:80' -Name 'MYDOMAIN\user1' New-BrokerUser -AdminAddress 'test-ddc.mydomain.com:80' -Name 'MYDOMAIN\user2' 

Les commandes suivantes ne sont pas requises, Studio réalise des vérifications supplémentaires.

8. Test-BrokerAccessPolicyRuleNameAvailable -AdminAddress 'test-ddc.mydomain.com:80' -Name @('Win7 PvD Desktops_Direct')

Studio teste que le nom de règle de stratégie d'accès est disponible à l'utilisation.

9. New-BrokerAccessPolicyRule -AdminAddress 'test-ddc.mydomain.com:80' -AllowedConnections 'NotViaAG' -AllowedProtocols @('HDX','RDP') -AllowRestart $True -DesktopGroupUid 41 -Enabled $True -IncludedSmartAccessFilterEnabled $True -IncludedUserFilterEnabled $True -IncludedUsers @('MYDOMAIN\user1','MYDOMAIN\user2') -LoggingId 846f2d42-a994-4bce-ab58-be05c8d73b99 -Name 'Win7 PvD Desktops_Direct'

Crée la règle de stratégie d'accès pour le nouveau bureau pour les connexions autres que NetScaler Gateway.

10. Test-BrokerAccessPolicyRuleNameAvailable -AdminAddress 'test-ddc.mydomain.com:80' -Name @('Win7 PvD Desktops_AG') New-BrokerAccessPolicyRule -AdminAddress 'test-ddc.mydomain.com:80' -AllowedConnections 'ViaAG' -AllowedProtocols @('HDX','RDP') -AllowRestart $True -DesktopGroupUid 41 -Enabled $True -IncludedSmartAccessFilterEnabled $True -IncludedSmartAccessTags @() -IncludedUserFilterEnabled $True -IncludedUsers @('MYDOMAIN\user1','MYDOMAIN\user2') -LoggingId 846f2d42-a994-4bce-ab58-be05c8d73b99 -Name 'Win7 PvD Desktops_AG'

Studio répète ce processus pour les connexions NetScaler Gateway.

11. Test-BrokerPowerTimeSchemeNameAvailable -AdminAddress 'test-ddc.mydomain.com:80' -Name @('Win7 PvD Desktops_Weekdays') New-BrokerPowerTimeScheme -AdminAddress 'test-ddc.mydomain.com:80' -DaysOfWeek 'Weekdays' -DesktopGroupUid 41 -DisplayName 'Weekdays' -LoggingId 846f2d42-a994-4bce-ab58-be05c8d73b99 -Name 'Win7 PvD Desktops_Weekdays' -PeakHours @($False,$False,$False,$False,$False,$False,$False,$True,$True,$True,$True,$True,$True,$True,$True, $True,$True,$True,$True,$False,$False,$False,$False,$False) -PoolSize @(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) Test-BrokerPowerTimeSchemeNameAvailable -AdminAddress 'test-ddc.mydomain.com:80' -Name @('Win7 PvD Desktops_Weekend') New-BrokerPowerTimeScheme -AdminAddress 'test-ddc.mydomain.com:80' -DaysOfWeek 'Weekend' -DesktopGroupUid 41 -DisplayName 'Weekend' -LoggingId 846f2d42-a994-4bce-ab58-be05c8d73b99 -Name 'Win7 PvD Desktops_Weekend' -PeakHours @($False,$False,$False,$False,$False,$False,$False,$True,$True,$True,$True,$True,$True,$True,$True, $True,$True,$True,$True,$False,$False,$False,$False,$False) -PoolSize @(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)

Studio vérifie que les noms des systèmes de puissance (facultatif) de la semaine et du week-end sont disponibles, et les ajoute.

12. Stop-LogHighLevelOperation -AdminAddress 'test-ddc.mydomain.com:80' -EndTime 31/07/2013 10:09:05 -HighLevelOperationId '846f2d42-a994-4bce-ab58-be05c8d73b99' -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

Cette section illustre comment convertir et adapter les résultats Studio dans un script plus lisible.

Le script crée un groupe de mise à disposition contenant des bureaux PvD. Le catalogue spécifié dans les paramètres doivent déjà exister et être remplis de manière appropriée (avec un type d'allocation statique et un disque PvD). Le script est conçu pour être exécuté depuis une ligne de commande Powershell et connecté en tant qu'administrateur Citrix. Aucune vérification n'est effectuée pour les permissions ; le script échouera si l'utilisateur ne possède pas les permissions appropriées.

<# Sample usage: .\CreatePvDGroup.ps1 ` -GroupName "Win7 PvD Desktops" ` -SrcCatalog "win7-pvd" ` -NumDesktops 2 ` -Users @('mydomain\user1','mydomain\user2') ` #> Param( [Parameter(Mandatory=$true)] [string] $GroupName, [Parameter(Mandatory=$true)] [string] $SrcCatalog, [Parameter(Mandatory=$true)] [int] $NumDesktops, [Parameter(Mandatory=$true)] [array] $Users [string] $AdminAddress )

Le tableau explique les paramètres utilisés dans le script.

Paramètre Description
GroupName Le nom du nouveau groupe de bureaux PvD
SrcCatalog Le nom du catalogue devant être utilisé pour créer le bureau PvD. Crée le catalogue en spécifiant un type d'allocation statique. Les machines doivent également posséder des disques PvD.
NumDesktops Le nombre de machines à ajouter au groupe de bureaux PvD. Si un nombre de machines insuffisant est disponible, autant de machines que possible sont ajoutées.
Utilisateurs Quels utilisateurs peuvent accéder au groupe. Ceci est une liste des utilisateurs ou des groupes ; par exemple, @('mondomaine\Domain Users') ou @('mondomaine\utilisateur1','mondomaine\utilisateur2')
Set-HypAdminConnection -AdminAddress $adminAddress

Spécifiez la connexion administrateur de l'hyperviseur à utiliser. Supprime le besoin pour -AdminAddress pour certaines des commandes.

$peakPoolSize = 2 $weekendPoolSizeByHour = new-object int[] 24 $weekdayPoolSizeByHour = new-object int[] 24 9..17 | %{ $weekdayPoolSizeByHour[$_] = $peakPoolSize } $peakHours = (0..23 | %{ $_ -ge 9 -and $_ -le 17 })

Ceci crée des matrices de 24 éléments comportant un 1 ou un 0 dans chaque entrée. Utilisez ceux-ci pour spécifier les heures de pointe des horaires de puissance pour les groupes de disposition. Les éléments 9 à 17 (heures de 9 heures à 17 heures) pour les jours de la semaine sont définis sur 1, et d'autres sont définis sur 0. Deux machines non attribuées sont mises sous tension lors des horaires de pointe, si disponible.

$logId = Start-LogHighLevelOperation ` -Text "Create PvD desktop group" ` -Source "Create PvD Desktop Group Script" 

Démarrez une nouvelle opération journalisée. Ceci retourne un ID de journal qui est transmis dans des opérations suivantes pour les associer à la création du groupe de tâches.

$grp = New-BrokerDesktopGroup ` -DesktopKind 'Private' ` -DeliveryType 'DesktopsOnly' ` -LoggingId $logId.Id ` -Name $GroupName ` -PublishedName $GroupName ` -SessionSupport 'SingleSession' ` -ShutdownDesktopsAfterUse $False $count = Add-BrokerMachinesToDesktopGroup ` -Catalog $SrcCatalog ` -Count $NumDesktops ` -DesktopGroup $GroupName ` -LoggingId $logId.Id "$count machines added to the PvD desktop group"

Créez le nouveau groupe de mise à disposition, en mettant à disposition des bureaux privés. Le catalogue utilisé doit avoir été rempli par des machines appropriées (de manière permanente avec un disque PvD). PublishedName est le nom vu par les utilisateurs finaux ; ce qui suit utilise le même nom que le nom de groupe.

New-BrokerAssignmentPolicyRule ` -DesktopGroupUid $grp.Uid ` -IncludedUserFilterEnabled $False ` -LoggingId $logId.Id ` -MaxDesktops 1 ` -Name ($GroupName + '_AssignRule') ` | Out-Null

Les bureaux attribués ont besoin d'une stratégie d'affectation. Désactivez le filtre utilisateur afin que l'accès soit complètement contrôlé par les règles de stratégie d'accès.

New-BrokerAccessPolicyRule ` -AllowedConnections 'NotViaAG' ` -AllowedProtocols @('HDX','RDP') ` -AllowRestart $True ` -DesktopGroupUid $grp.Uid ` -IncludedSmartAccessFilterEnabled $True ` -IncludedUserFilterEnabled $True ` -IncludedUsers $Users ` -LoggingId $logId.Id ` -Name ($GroupName + '_Direct') ` | Out-Null New-BrokerAccessPolicyRule ` -AllowedConnections 'ViaAG' ` -AllowedProtocols @('HDX','RDP') ` -AllowRestart $True ` -DesktopGroupUid $grp.Uid ` -IncludedSmartAccessFilterEnabled $True ` -IncludedSmartAccessTags @() ` -IncludedUserFilterEnabled $True ` -IncludedUsers $Users ` -LoggingId $logId.Id ` -Name ($GroupName + '_AG') ` | Out-Null  

Spécifiez toute restriction d'accès : autorisez l'accès direct à l'aide de NetScaler Gateway, utilisant les protocoles HDX & RDP. L'utilisateur peut requérir le redémarrage du bureau, si nécessaire.

New-BrokerPowerTimeScheme ` -DaysOfWeek 'Weekdays' ` -DesktopGroupUid $grp.Uid ` -DisplayName 'Weekdays' ` -LoggingId $logId.Id ` -Name ($GroupName + '_Weekdays') ` -PeakHours $peakHours ` -PoolSize $weekdayPoolSizeByHour ` | Out-Null New-BrokerPowerTimeScheme ` -DaysOfWeek 'Weekend' ` -DesktopGroupUid $grp.Uid ` -DisplayName 'Weekend' ` -LoggingId $logId.Id ` -Name ($GroupName + '_Weekend') ` -PeakHours $peakHours ` -PoolSize $weekendPoolSizeByHour ` | Out-Null 

Facultatif : spécifiez les horaires de puissance.

Stop-LogHighLevelOperation -HighLevelOperationId $logId.Id -IsSuccessful $True 

Arrêtez la journalisation de la configuration et indiquez si l'opération a réussi ou non.