Catégorie : Scripting

Script de création de rôle Horizon sur vCenter 8.0

Afin d’accélérer les déploiements et d’éviter les erreurs, j’ai conçu un script Powershell (basé sur un script VMware) dont le but est d’ajouter un rôle dans vCenter pour l’utilisateur vCenter avec Instant-Clones (compte défini dans Horizon).

Ce script est spécifique à vCenter 8.0 mais il peut facilement être adapté à une version antérieure.
Il va créer un rôle nommé “Horizon” avec uniquement les privilèges nécessaires.

Préquis

  • vCenter 8.0+
  • Machine Windows avec VMware PowerCLI
  • Autorisation de lancer des scripts Powershell (Set-ExecutionPolicy)
  • Compte administrateur du vCenter

Utilisation

  • Télécharger le script lien
  • Modifier la variable $viserver avec le fqdn de votre vCenter
  • Exécuter le script

Import-Module VMware.VimAutomation.Core
$Role = "Horizon"

$viserver = "vcenter.domaine.local"

Connect-VIServer -server $viServer
$RoleIds = @()

# Opérations cryptographiques
"Cryptographer.Access", "Cryptographer.Clone", "Cryptographer.Decrypt", 
"Cryptographer.Encrypt", "Cryptographer.ManageKeyServers", "Cryptographer.Migrate", "Cryptographer.RegisterHost", 

# Banque de données
"Datastore.AllocateSpace", "Datastore.Browse", 

# Dossier
"Folder.Create", "Folder.Delete", 

# Global
"Global.DisableMethods", "Global.EnableMethods", "Global.ManageCustomFields", 
"Global.SetCustomField", "Global.VCServer", 

# Hote	
"Host.Config.AdvancedConfig", "Host.Inventory.EditCluster", 

# Reseau
"Network.Assign", 

# Ressource
"Resource.AssignVMToPool", "Resource.HotMigrate", 

# strategies de stockage de machine virtuelle
"StorageProfile.Apply", "StorageProfile.EditPermissions", "StorageProfile.Update", 
"StorageProfile.View", "StorageProfile.ViewPermissions", "System.Anonymous", 

# Systeme
"System.Read", "System.View", 

# Machine virtuelle / Configuration
"VirtualMachine.Config.AddExistingDisk", "VirtualMachine.Config.AddNewDisk", "VirtualMachine.Config.AddRemoveDevice", 
"VirtualMachine.Config.AdvancedConfig", "VirtualMachine.Config.Annotation", "VirtualMachine.Config.CPUCount", 
"VirtualMachine.Config.ChangeTracking", "VirtualMachine.Config.DiskExtend", "VirtualMachine.Config.DiskLease", 
"VirtualMachine.Config.EditDevice", "VirtualMachine.Config.HostUSBDevice", "VirtualMachine.Config.ManagedBy", 
"VirtualMachine.Config.Memory", "VirtualMachine.Config.MksControl", "VirtualMachine.Config.QueryFTCompatibility", 
"VirtualMachine.Config.QueryUnownedFiles", "VirtualMachine.Config.RawDevice", "VirtualMachine.Config.ReloadFromPath", 
"VirtualMachine.Config.RemoveDisk", "VirtualMachine.Config.Rename", "VirtualMachine.Config.ResetGuestInfo", 
"VirtualMachine.Config.Resource", "VirtualMachine.Config.Settings", "VirtualMachine.Config.SwapPlacement", 
"VirtualMachine.Config.ToggleForkParent", "VirtualMachine.Config.UpgradeVirtualHardware", "VirtualMachine.Interact.DeviceConnection", 

# Machine virtuelle / Interaction
"VirtualMachine.Interact.PowerOff", "VirtualMachine.Interact.PowerOn", "VirtualMachine.Interact.Reset", 
"VirtualMachine.Interact.SESparseMaintenance", "VirtualMachine.Interact.Suspend", "VirtualMachine.Inventory.Create", 

# Machine virtuelle / Inventaire
"VirtualMachine.Inventory.CreateFromExisting", "VirtualMachine.Inventory.Delete", "VirtualMachine.Inventory.Move", 
"VirtualMachine.Inventory.Register", "VirtualMachine.Inventory.Unregister", 

# Machine virtuelle / Provisionnement
"VirtualMachine.Provisioning.Clone", "VirtualMachine.Provisioning.CloneTemplate", "VirtualMachine.Provisioning.Customize", "VirtualMachine.Provisioning.DiskRandomAccess", 
"VirtualMachine.Provisioning.ReadCustSpecs", "VirtualMachine.Provisioning.DeployTemplate", 

# Machine virtuelle / Gestion des snapshots
"VirtualMachine.State.CreateSnapshot", "VirtualMachine.State.RemoveSnapshot", 
"VirtualMachine.State.RenameSnapshot", "VirtualMachine.State.RevertToSnapshot" |

 Foreach-Object{
    $RoleIds += $_
}
New-VIRole -name $Role -Privilege (Get-VIPrivilege -Server $viserver -id $RoleIds) -Server $viserver

Set-VIRole -Role $Role -AddPrivilege (Get-VIPrivilege -Server $viserver -id $RoleIds) -Server $viserver
  • Ajouter une nouvelle autorisation à la racine du vCenter pour l’utilisateur vCenter avec le rôle Horizon

ℹ️ Il faut parfois se délogger de vSphere Web Client pour voir apparaître le nouveau rôle.

Suppression des logs du master

Lors de l’optimisation de la VM master Horizon avec VMware OSOT, les fichiers de logs de l’agent Horizon dans le dossier C:\ProgramData\VMware\VDM\logs ne sont pas supprimés.
Cela peut être gênant lors du debugging des bureaux virtuels ou du template interne car ces fichiers peuvent vite devenir volumineux.

Pour supprimer l’ensemble des logs, le script suivant doit être lancé en Powershell sur le master avant son extinction.

<# Arrêt des process Horizon #>
net stop tsdrvdisvc
net stop WSNM
net stop vmware_print_redir_service
net stop vmwrxgservice
net stop Spooler
net stop v4v_agent
net stop VMBlast
net stop hzMonService
net stop vmware-viewcomposer-ga
net stop ftscansvchv
net stop ftnlsv3hv
net stop vmwsprrdpsrv
taskkill /IM "scanner.exe" /F
taskkill /IM "vmwareviewclipboard.exe" /F
taskkill /IM "WSSM.exe" /F
taskkill /IM "vmwsprrdp.exe" /F

<# Suppression des fichiers de logs #>
Remove-Item C:\ProgramData\VMware\VDM\logs\* -Force -ErrorAction SilentlyContinue -Recurse
Remove-Item 'C:\ProgramData\VMware\VMware Blast\*' -Force -ErrorAction SilentlyContinue -Recurse

Script PowerShell disponible ici lien

Automatiser l’installation des VMware Tools

Le master Microsoft Windows utilisé par VMware Horizon nécessite l’installation des VMware Tools de manière personnalisée afin d’optimiser l’image.

Lors de l’installation, il est recommandé de supprimer les composants suivants:

  • Assistance VMware Carbon Black
  • Fournisseur de temps VMware
  • Pilote d’introspection de fichier NSX
  • Pilote d’introspection de réseau NSX
  • Détection des services
  • Dossiers partagés
  • Support de services VSS

Pour installer VMware Tools en ligne de commande de manière automatique, sans prise en charge de VMware NSX, sans reboot automatique et avec retour graphique :

setup64.exe /s /v" /qb REBOOT=R ADDLOCAL=ALL REMOVE=VmwTimeProvider,FileIntrospection,NetworkIntrospection,ServiceDiscovery,Hgfs,VSS,CBHelper

Pour installer VMware Tools en ligne de commande de manière automatique, avec prise en charge de VMware NSX, sans reboot automatique et avec retour graphique :

setup64.exe /s /v" /qb REBOOT=R ADDLOCAL=ALL REMOVE=VmwTimeProvider,ServiceDiscovery,Hgfs,VSS,CBHelper

 ⚠️ Windows 10 : VMware Tools 10.1.0 minimum
 ⚠️ Windows 11 : VMware Tools 10.3.5 minimum

Script de délégation Instant-Clone

Le compte utilisateur Active Directory utilisé par VMware Instant-Clone requiert plusieurs permissions sur l’unité d’organisation (OU) où sont stockés les comptes d’ordinateurs des machines Instant-Clone.
Ces permissions sont également appliquées sur les OU enfants.

Pour automatiser cette délégation, j’ai créé un script PowerShell où il faut simplement paramétrer deux variables.

$ICuser correspond à l’utilisateur de domaine définit au niveau du pool.
$OU correspond à l’unité d’organisation (conteneur AD) des bureaux virtuels.

Lancer le script sur un contrôleur de domaine AD.

# Script de délégation de controle Active Directory
# Pour l'utilisateur VMware Instant-Clone
# https://vdihub.fr

# Renseigner OU bureaux virtuels Horizon entre ""
$OU = "OU=vdi,DC=dom,DC=local"

# Renseigner utilisateur Instant-Clone entre ""
$ICuser = "DOM\user"

# Effacement des erreurs précédentes
$Error.Clear()

# Créer / supprimer les objets ordinateurs (Create Delete Computer Objects)
dsacls "$OU" /G ""$ICuser":CCDC;Computer" /I:T

# Ecrire toutes les propriétes (Read All Properties)
dsacls "$OU" /G ""$ICuser":WP;;Computer" /I:S

# Lire toutes les propriétes (Write All Properties)
dsacls "$OU" /G ""$ICuser":RP;;Computer" /I:S

 # Lister le contenu (List Contents)
dsacls "$OU" /G ""$ICuser":LC;;Computer" /I:S

# Lire les permissions (Read Permissions)
dsacls "$OU" /G ""$ICuser":RC;;Computer" /I:S 

# Réinitialiser le mot de passe (Reset Password)
dsacls "$OU" /G ""$ICuser":CA;Reset Password;Computer" /I:S

# Rapport
$Error
Write-Host ""
Write-Host "User configuré : $ICuser" -ForegroundColor darkblue -BackgroundColor white
Write-host "OU configurée : $OU" -ForegroundColor darkblue -BackgroundColor white

Script PowerShell disponible ici lien

Outils pour Horizon et autres

En dehors des Flings VMware, il existe quelques logiciels utiles pour l’écosystème Horizon. Voici une liste non exhaustive.


VDIHub Blast Configurator

Outils de configuration du protocole Blast Extreme.
Il permet de tester en temps-réel les codecs, la qualité, les FPS, etc…
Voir mon article ici


Horizon Golden Image Deployment Tool

Outil tiers de déploiement de Golden Image codé en Python

Téléchargement lien


Base Image Script Framework (BIS-F)

Outil d’optimisation pour les masters Windows


Horizon Reach

Monitoring gratuit de VMware Horizon
Voir mon article ici


Virtual Desktop Optimization Tool

Il s’agit d’un script Powershell régulièrement mis à jour qui permet l’optimisation d’un Master sous Windows.
Disponible sur GitHub lien


Remote Display Analyzer

Outil d’analyse permettant d’ajuster au mieux les paramètres de VMware Blast / Citrix HDX.
Gratuit en version Community lien


GPUProfiler

Outil permettant de mesurer l’utilisation du GPU. Pratique pour dimensionner une solution VDI avec vGPU.
Disponible sur GitHub lien


david.li

Site internet permettant de vérifier la fluidité sur des rendus 3d WebGL lien.


Grim Admin Screensaver

Ecran de veille personnalisable permettant de lancer des commandes (shutdown, restart, scripts,…) lien


Autoruns for Windows

Outils Microsoft permettant de désactiver les éléments lancés au boot afin d’optimiser la séquence de démarrage et d’économiser des ressources lien


Dell Wyse USB Imaging Tool

L’outil d’imagerie pour les client légers Wyse.
Il permet d’extraire ou de générer des images de systèmes d’exploitation. lien


VMware Horizon Toolbox

Horizon Toolbox est un portail Web qui sert d’extension à Horizon View Administrator. lien

Exporter la configuration d’un pool Horizon

Avec PowerCLI, il est possible d’exporter la configuration d’un pool au format JSON

Lancer PowerShell

Se connecter au Connection Server en tapant:
Connect-HVServer -server fqdn_du_cs

Entrer un compte administrateur du Connection Server (avec le domaine)

Exporter la configuration du pool en tapant la commande :
Get-HVPool -PoolName Pool-A | Get-HVPoolSpec -FilePath "C:\temp\pool-a.json"

Attention, certains paramètres ne sont pas exportés correctement (label réseau) ou son mal traités par le module VMware.Hv.Helper lors de l’import (Storage Accelerator)

Utiliser PowerCLI pour VMware Horizon

PowerCLI est en ensemble de modules PowerShell permettant d’automatiser des actions sur les produits VMware.

Lancer PowerShell


Si le Connection Server ne possède pas de certificat valide, il est nécessaire de configurer PowerCLI, sinon une erreur se produira.

Taper Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Confirm:$false 


Se connecter au Connection Sever en tapant:
Connect-HVServer -server fqdn_du_cs

Entrer un compte administrateur du Connection Server (avec le domaine)

Exemple : Récupérer une synthèse des postes de travail :

Get-HVMachineSummary

Installer PowerShell / PowerCLI pour VMware Horizon

PowerCLI est en ensemble de modules PowerShell permettant d’automatiser des actions sur les produits VMware.

Lancer PowerShell 7.0+

Taper la commande Install-Module VMware.PowerCLI puis valider par O

Approuver le référentiel en tapant O

Patienter quelques minutes le temps de l’installation des modules

Importer le module Horizon PowerCLI en tapant Import-Module -Name VMware.VimAutomation.HorizonView


Si une erreur de type Execution_Policies apparait, il faut changer le paramétrage de PowerShell en tapant la commande Set-ExecutionPolicy Unrestricted avant d’importer le module.


Télécharger PowerCLI-Example-Scripts au format .zip sur le repository GitHub de VMware
https://github.com/vmware/PowerCLI-Example-Scripts

Extraire le fichier zip et copier le répertoire VMware.Hv.Helper (situé dans \PowerCLI-Example-Scripts-masterPowerCLI-Example-Scripts-master\Modules\) dans le dossier C:\Program Files\WindowsPowerShell\Modules

Importer le module Horizon PowerCLI en tapant :
Import-Module -Name VMware.Hv.Helper
Valider par O


Pour mettre à jour PowerCLI, taper la commande suivante
Update-Module -Name VMware.PowerCLI

Fièrement propulsé par WordPress & Thème par Anders Norén