Oggi vi mostrerò come è possibile scriptare la creazione di utenti sugli host ESXi di VMWare utilizzando Powershell e PowerCLI: un modulo molto potente per amministrare la nostra infrastruttura virtuale con Powershell.
Per prima cosa è necessario aver installato la PowerCLI
nella nostra powershell… altrimenti questi comandi non funzioneranno…
Vedete quindi l’articolo “Come installare la VMWare PowerCLI in Powershell”
e poi tornate qui…
Una volta installata, quando lanciamo la nostra powershell, importiamo il modulo di VMWare PowerCLI:
import-module
VMware.PowerCLI
E cominciamo a SCRIPTARE…
$a = "hypervisor1.mydomain.local", "hypervisor2.mydomain.local", "hypervisor3.mydomain.local"
$userN="infranagios"
$strPW="bWtw#N--yERHGy8o"
$strDescr="a simple admin user"
$HOSTCredentials = Get-Credential -Credential root
$a | foreach {
$ESXhost =$_
Connect-VIServer $ESXhost -Credential $HOSTCredentials
New-VMHostAccount -Id $userN -Password $strPW -Description $strDescr -UserAccount -Server $ESXhost
$AuthMgr = Get-View (Get-View
ServiceInstance).Content.AuthorizationManager
$Entity = Get-Folder
ha-folder-root | Get-View
$Perm = New-Object
VMware.Vim.Permission
$Perm.entity = $Entity.MoRef
$Perm.group = $false
$Perm.principal = $userN
$Perm.propagate = $true
$Perm.roleId = "-1"
$AuthMgr.SetEntityPermissions($Entity.MoRef,$Perm)
Disconnect-VIServer $ESXhost
}
Note importanti:
In questa dimostrazione ho deciso di copiare e incollare i comandi direttamente dentro una powershell, tuttavia nulla vi vieta di crearvi un file .ps1 e modificarlo come credete.
Come vedete qui ho fatto la scelta di definire username e password in variabile prima, ma nulla vi vieta di ciclare su un file excel e di creare tutti gli utenti su tutti i server, oppure determinati utenti su determinati server... "fate vobis"...
Ho anche fatto un video (ho scritto in inglese, per fare un esperimento) che mostra il funzionamento dello script... ve lo "embeddo" !
Ora comentiamo insieme il codice:
$a è un elenco di server, separato da virgola, su cui
vogliamo creare l’utente.
$userN è lo username che vogliamo creare
$strPW è la password che verrà assegnata all’utente.
$strDescr è la descrizione che comparirà per l’utente.
2 - A questo punto richiedo le credenziali in modo sicuro con
get-credentials e le memorizzo in una variabile.
3 - Quindi comincio a ciclare su tutti i servers in elenco e,
per ognuno
- Mi connetto usando le credenziali
- Creo l’utente con il comando New-VMHostAccount (per ora è un utente senza ruolo)
- Ottengo l’istanza del servizio di AuthorizationManager
- Ottengo l'istanza della "Entity" del server (o root folder)
- Creo un nuovo oggetto permissions e gli assegno il ruolo “-1” (che è quello dell’amministratore), la associo all'utente ed alla entity del server (la root folder).
- Salvo quindi la permission dentro l’istanza del servizio AuthorizationManager
- mi disconnetto dal server.
Quest'ultimo passaggio (la disconnessione) è molto importante, altrimenti PowerCLI cercherà di attuare i comandi impartiti su tutti i servers connessi... Tuttavia lo script così come è non potrebbe funzionare, avendo necessità di istanziare determinati oggetti del server che vogliamo gestire.
Uno alla volta quindi!
Happy Scripting a tutti!