banner
Centro notizie
Migliorare costantemente le nostre tecniche e la qualità per rimanere aggiornati con le tendenze del settore.

Come utilizzare PowerShell per tenere traccia delle risorse VDI

Aug 07, 2023

Maxim_Kazmin - Fotolia

PowerShell è profondamente integrato nel sistema operativo Windows, quindi puoi utilizzare PowerShell per cercare aree sottoutilizzate di VDI.

Di seguito sono riportati alcuni metodi di base che puoi adattare al tuo ambiente per utilizzare PowerShell per tenere traccia delle risorse VDI.

Se il tuo obiettivo è creare uno script PowerShell per tenere traccia dell'utilizzo delle risorse VDI, dovresti prima creare un ciclo in grado di visualizzare i tuoi server uno alla volta. Per fare ciò, crea un elenco di tutti i server.

Ai fini di questo articolo, codificherò i nomi dei server, ma potresti progettare lo script per interrogare i nomi o invece estrarre i nomi da un file di testo. Entrambi i metodi renderebbero lo script più dinamico.

Ecco una riga di codice che crea un array contenente un elenco di server:

$Server = @("Hyper-V-1", "Hyper-V-2", "Hyper-V-3", "Hyper-V-4")

Questa riga crea una variabile chiamata $Servers, che contiene un elenco di server Hyper-V denominati Hyper-V-1, Hyper-V-2, ecc. Puoi modificare questo comando se utilizzi una piattaforma VDI che non è basata su Hyper-V.

Ora che hai un elenco di server mappati su una variabile, il passaggio successivo è creare un ciclo:

Per Ogni ($Server in $Server) {}

Questo ciclo procede attraverso l'elenco dei server uno per uno. Il codice termina con una serie di parentesi. Qualsiasi codice aggiunto tra le due parentesi verrà applicato a ciascun server nell'elenco.

Il passaggio successivo consiste nello scrivere del codice in grado di verificare se un host VDI è sottoutilizzato. Innanzitutto, dovresti determinare cosa significa che un host è sottoutilizzato.

Ai fini di questo articolo, definirò un server sottoutilizzato come un server che ha più del 20% della memoria disponibile. Tuttavia, dovresti utilizzare una definizione che abbia senso per il tuo ambiente.

Ecco come appare il mio script:

$Server = @("Hyper-V-1", "Hyper-V-2", "Hyper-V-3", "Hyper-V-4")ForEach ($Server in $Server) {

$ServerName = $Server$MySession = New-PSSession -ComputerName $ServerNameInvoke-Command -Session $MySession -ScriptBlock {

Write-Host $ServerName$TotalMemory = (Get-CimInstance Win32_OperatingSystem).TotalVisibleMemorySize$FreeMemory = (Get-CimInstance Win32_OperatingSystem).FreePhysicalMemory$TargetMemorySize = $TotalMemory * .2Write-Host "Memoria totale: " $TotalMemoryWrite-Host "Memoria libera: " $FreeMemoryIf ($FreeMemory -GT $TargetMemorySize) { Write-Host "Questo host è sottoutilizzato"}If ($FreeMemory -LT $TargetMemorySize) {Write-Host "Questo host non è sottoutilizzato"}}}

Questo script presuppone che tutti gli host siano uniti a un dominio e che Kerberos sia l'autenticatore.

La prima sezione dello script definisce l'elenco degli host che interrogherà e quindi imposta un ciclo. Creerò una variabile chiamata $ServerName che contiene il nome del server su cui lo script sta attualmente interrogando.

Le due righe di codice successive stabiliscono una sessione remota con il server interrogato dal comando. Il cmdlet Invoke-Command definisce un blocco di script. Tutto il codice all'interno del blocco di script viene eseguito su un computer remoto.

$MySession = New-PSSession -ComputerName $ServerNameInvoke-Command -Session $MySession -ScriptBlock {

Il contenuto del blocco di script confronta la memoria totale del server con la memoria in uso per determinare se il server è sottoutilizzato o meno. La variabile $TotalMemory contiene la quantità totale di memoria installata nel server, mentre la variabile $FreeMemory memorizza la quantità rimanente di memoria.

In questo esempio, i server sottoutilizzati utilizzano meno dell'80% della memoria disponibile. Ho creato una variabile chiamata $TargetMemorySize che contiene un valore pari al 20% della memoria totale --$TotalMemory * .2. Ciò mi consente di confrontare la quantità di memoria libera del server - $FreeMemory - con il mio valore target - $TargetMemorySize - per determinare se la macchina è sottoutilizzata o meno.

Per semplicità, ho creato una versione modificata dello script. Ho rimosso il loop e il codice per creare una sessione remota. Questo script semplificato esamina solo la macchina locale invece di interrogare gli host remoti. Ho anche aggiunto una riga di codice per visualizzare la dimensione della memoria di destinazione. Ecco lo script semplificato: