TUTOS.EU

Ajouter une VM à un catalogue en Powershell pour Citrix Xendesktop V7.5

Comment ajouter une VM à un catalogue en ligne de commande pour Xendesktop V7.5

L'exemple suivant se base sur une infrastructure XenDesktop 7.5.
L'hyperviseur est ici celui de Microsoft, sous 2012 R2.

Commencez par charger les modules Citrix :

asnp citrix.*
Lien vers le fichier : cliquez ici

La commande pour ajouter une machine dans un catalogue Citrix ressemble à ceci :

New-BrokerMachine -CatalogUid 22 -HypervisorConnectionUid 4 -MachineName "Domaine\NomDelaVM" -HostedMachineId 9b96d6d8-8682-4818-8407-25baf1blabla
Lien vers le fichier : cliquez ici

Il vous faut donc renseigner ces paramètres :
CatalogUid
HypervisorConnectionUid
MachineName
HostedMachineId

On va commencer par récupérer le HypervisorConnectionUid, c'est à dire l'UID de la connexion de l'hyperviseur.

Pour cela utilisez la commande

Get-BrokerHypervisorConnection | Select Name, UID, State
Lien vers le fichier : cliquez ici

Ensuite récupérez l'Uid du catalogue où vous voulez déclarer votre machine.
Pour cela j'ai utilisez cette commande :

Get-BrokerCatalog | Select Name, UID
Lien vers le fichier : cliquez ici

Le plus difficile, c'est le HostedMachineId

Cela correspond à l'ID de la machine à ajouter et qui est propre à l'hyperviseur qui héberge votre VM.

Vous pouvez le récupérer en interrogeant directement votre hyperviseur avec les commandes Powershell propres à votre hyperviseur. Vous pouvez aussi utiliser votre DDC, utiliser les commandes Powershell de Citrix et passer par la connexion qui pointe sur votre hyperviseur et qui est déclarée sous Hosting dans la console de Citrix Studio.

Les commandes powershell qui sont propres à votre hyperviseur répondent vite, alors que celles de Citrix qui interrogent votre hyperviseur peuvent mettre plusieurs minutes à répondre. Aussi, le plus simple est d'interroger directement votre hyperviseur avec ses commandes powershell.

Voici comment faire si votre hyperviseur est MS Hyper-V 2012.

Depuis la machine qui héberge la Virtual Machine Manager Console, tapez :

Get-SCVirtualMachine | Where-Object {$_.Name -match "NomDelaVmAAjouter"} | select Name, ID, Status
Lien vers le fichier : cliquez ici

Exemple d'Id récupéré et qui servira à renseigner le HostedMachineId :

Pour mettre tout votre code dans un seul script, vous allez être embêtés car les commandes Citrix doivent être passées depuis un DDC alors que les commandes d'interrogation de votre Hyperviseur doivent être exécutées sur une autre machine.

Heureusement, en Powershell vous pouvez exécuter du code à distance. Voici un exemple pour récupérer l'ID depuis la machine qui dispose de la console de gestion de l'hyperviseur :

asnp citrix.*
$NomVm = "NomDomaine\NomVM"
$NomVm02 = $NomVm.substring(($($NomVm.indexof("\"))+1)) #On retire le nom de domaine ainsi que le \
#Write-host $NomVm02

#Récupération de l'ID de la machine dans l'Hyperviseur
$job = Invoke-command { param($NomVm) Get-SCVirtualMachine | Where-Object {$_.Name -match $NomVm} | select Name, ID, Status } -ArgumentList $NomVm02 -ComputerName NomMachineDistante -AsJob

Wait-Job $job
$MonResultat = Receive-Job $job
Write-host $MonResultat.ID


Lien vers le fichier : cliquez ici

On va maintenant voir l'autre méthode pour récupérer le HostedMachineId.
On va utiliser les commandes Powershell de Citrix et passer par la connexion qui pointe sur votre hyperviseur et qui est déclarée sous Hosting dans la console de Citrix Studio.

Pour cela connectez vous sur un DDC Citrix, lancez une console powershell et tapez :

asnp citrix.*
cd XdHyp:\Connections
Lien vers le fichier : cliquez ici

De là vous pouvez naviguer dans l'arborescence Hyper-V comme si vous étiez en train de naviguer dans un système de fichiers Linux.
Ainsi vous pouvez utiliser les commandes suivantes :

ls : pour lister les données présentent dans la branche où vous êtes
cd [Nom de l'élément] : pour entrer dans un sous élément de l'arborescence
Lien vers le fichier : cliquez ici

Beaucoup d'information seront affichées.
Si vous ne souhaitez afficher que les noms, faites :

ls | Select PSChildName
Lien vers le fichier : cliquez ici

Exemple de résultat de commande ls filtrée

Ce que vous voyez la racine de XdHyp:\Connections correspond aux connexion vers vos hyperviseurs que vous retrouverez dans la console Citrix Studio, sous Hosting :

Entrez dans l'arborescence d'une connexion. Ici l'une d'elle se nomme Test, aussi pour y entrer, tapez cd Test (les majuscules et minuscules sont importantes).

A partir de là, ce que vous verrez avec la commande ls | Select PSChildName (par exemple) correspondra à ce que vous avez sur votre Hyperviseur

Notre but va être d'aller dans l'emplacement qui contient la VM que vous voulez ajouter au catalogue.

Ici la VM à ajouter se trouve sous France, production etc ... Donc commencez par taper cd France etc .. jusqu'à l'emplacement de la machine à ajouter puis notez précisément le chemin d'accès complet à votre machine (le PSPath de mémoire)

Quand vous aurez le chemin complet de votre VM, vous pourrez récupérer son ID en vous inspirant de cette commande

$MonObjVm = Get-Item 'XDHyp:\Connections\Test\France.hostgroup\Production.hostgroup\Un sous element.hostgroup\Citrix.hostgroup\UnCluster.cluster\NomDeLaVM.vm'
write-host $MonObjVm.Id
Lien vers le fichier : cliquez ici

Comme chaque commande peut être très longue à répondre, sachez que vous pouvez extraire l'ensemble du contenu d'une partie de l'arborescence et la filtrer pour n'avoir que les machines avec ce type de commande :

Get-ChildItem -Path 'XDHyp:\Connections\Test\France.hostgroup\Production.hostgroup\Un sous element.hostgroup\Citrix.hostgroup\UnCluster.cluster' -force -recurse | ?{ $_.IsMachine } | Out-File –Filepath c:\XDHyp_Citrix_machine_extract.txt
Lien vers le fichier : cliquez ici

Une fois que vous aurez récupéré tout le nécessaire pour ajouter une machine dans un catalogue, et donc tout le nécessaire pour renseigner la commande New-BrokerMachine, y compris l'ID de la VM à ajouter qui servira à renseigner le paramètre HostedMachineId, la prochaine étape sera d'affecter votre machine à un delivery group. Pour cela utilisez ce type de commande :

Add-BrokerMachine "Domaine\NomDelaVM" -DesktopGroup "NomDeliveryGroup"
Lien vers le fichier : cliquez ici

Si vous voulez affecter un user à la machine, faites ainsi :

Add-BrokerUser -Name "Domaine\login" -Machine "Domaine\NomDelaVM"
Lien vers le fichier : cliquez ici

Au final voici un exemple complet d'ajout d'une VM dans le catalogue

asnp citrix.*
$NomVm = "NomDomaine\NomVM"
$NomUserAAjouter = "NomDomaine\Login"
$NomVm02 = $NomVm.substring(($($NomVm.indexof("\"))+1))
#Write-host $NomVm02

#Récupération de l'ID de la machine dans l'Hyperviseur
$job = Invoke-command { param($NomVm) Get-SCVirtualMachine | Where-Object {$_.Name -match $NomVm} | select Name, ID, Status } -ArgumentList $NomVm02 -ComputerName NomMachineAvecHyperviseur -AsJob
Wait-Job $job
$MonObjetMachineSurlHyperviseur = Receive-Job $job
Write-host $MonObjetMachineSurlHyperviseur.ID

#Fort de ces paramètres, ajoutez votre machine au catalogue avec une commande du type :
New-BrokerMachine -CatalogUid 42 -HypervisorConnectionUid 5 -MachineName $NomVm -HostedMachineId $($MonObjetMachineSurlHyperviseur.ID)

#puis affectez la machine à un delivery group :
Add-BrokerMachine $NomVm -DesktopGroup "NomDelivery"

Add-BrokerUser -Name $NomUserAAjouter -Machine $NomVm
Lien vers le fichier : cliquez ici

Si vous voulez contrôler l'id utilisé par Citrix d'une machine déjà entrée dans le catalogue, utilisez ce type de commande :

Get-BrokerMachine -MachineName NomDomaine\NomVM | Select MachineName, HostedMachineId
Lien vers le fichier : cliquez ici