banner
Centro de Noticias
Mejorando constantemente nuestras técnicas y calidad para mantenernos actualizados con las tendencias de la industria.

Cómo usar PowerShell para rastrear recursos VDI

Aug 07, 2023

Maxim_Kazmin - Fotolia

PowerShell está profundamente integrado en el sistema operativo Windows, por lo que puede utilizar PowerShell para buscar áreas infrautilizadas de VDI.

A continuación se muestran algunos métodos básicos que puede adaptar a su propio entorno para utilizar PowerShell para realizar un seguimiento de los recursos VDI.

Si su objetivo es crear un script de PowerShell para realizar un seguimiento de la utilización de recursos VDI, primero debe crear un bucle que pueda ver sus servidores uno a la vez. Para hacerlo, cree una lista de todos los servidores.

Para los propósitos de este artículo, codificaré los nombres de los servidores, pero usted podría diseñar el script para consultar los nombres o extraerlos de un archivo de texto. Cualquiera de los métodos haría que el guión fuera más dinámico.

Aquí hay una línea de código que crea una matriz que contiene una lista de servidores:

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

Esta línea crea una variable llamada $Servers, que contiene una lista de servidores Hyper-V llamados Hyper-V-1, Hyper-V-2, etc. Puede ajustar este comando si usa una plataforma VDI que no esté basada en Hiper-V.

Ahora que tiene una lista de servidores asignados a una variable, el siguiente paso es crear un bucle:

Para cada ($Servidor en $Servidores) {}

Este bucle avanza a través de la lista de servidores uno por uno. El código termina con un conjunto de corchetes. Cualquier código que agregue entre los dos corchetes se aplicará a cada servidor de la lista.

El siguiente paso es escribir un código que pueda verificar si un host VDI está infrautilizado. Primero, debe determinar qué significa que un host esté infrautilizado.

Por el bien de este artículo, definiré un servidor infrautilizado como un servidor que tiene más del 20% de su memoria disponible. Sin embargo, debería utilizar una definición que tenga sentido para su propio entorno.

Así es como se ve mi guión:

$Servidores = @("Hyper-V-1", "Hyper-V-2", "Hyper-V-3", "Hyper-V-4")ForEach ($Servidor en $Servidores) {

$ServerName = $Server$MySession = Nueva-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 total: " $TotalMemoryWrite-Host "Memoria libre: " $FreeMemoryIf ($FreeMemory -GT $TargetMemorySize) { Write-Host "Este host está infrautilizado"}If ($FreeMemory -LT $TargetMemorySize) {Write-Host "Este host no está infrautilizado"}}}

Este script supone que todos los hosts están unidos a un dominio y que Kerberos es el autenticador.

La primera sección del script define la lista de hosts que consultará y luego configura un bucle. Crearé una variable llamada $ServerName que contiene el nombre del servidor que el script está consultando actualmente.

Las siguientes dos líneas de código establecen una sesión remota con el servidor que consulta el comando. El cmdlet Invoke-Command define un bloque de script. Todo el código dentro del bloque de script se ejecuta en una máquina remota.

$MiSesión = Nueva-PSSession -ComputerName $ServerNameInvoke-Command -Session $MySession -ScriptBlock {

El contenido del bloque de script compara la memoria total del servidor con la memoria en uso para determinar si el servidor está infrautilizado o no. La variable $TotalMemory contiene la cantidad total de memoria instalada en el servidor, mientras que la variable $FreeMemory almacena la cantidad restante de memoria.

En este ejemplo, los servidores infrautilizados utilizan menos del 80% de la memoria disponible. He creado una variable llamada $TargetMemorySize que contiene un valor que es igual al 20% de la memoria total --$TotalMemory * .2. Esto me permite comparar la cantidad de memoria libre del servidor ($FreeMemory) con mi valor objetivo ($TargetMemorySize) para determinar si la máquina está infrautilizada o no.

Para simplificar, creé una versión modificada del script. Eliminé el bucle y el código para crear una sesión remota. Este script simplificado solo examina la máquina local en lugar de consultar hosts remotos. También agregué una línea de código para mostrar el tamaño de la memoria de destino. Aquí está el guión simplificado:

$TotalMemory = (Get-CimInstance Win32_OperatingSystem).TotalVisibleMemorySize$FreeMemory = (Get-CimInstance Win32_OperatingSystem).FreePhysicalMemory$TargetMemorySize = $TotalMemory * .2Write-Host "Memoria total: " $TotalMemoryWrite-Host "Memoria libre: " $FreeMemoryWrite-Host "Tamaño de memoria de destino: " $TargetMemorySizeIf ($FreeMemory -GT $TargetMemorySize) { Write-Host "Este host está infrautilizado"}If ($FreeMemory -LT $TargetMemorySize) {Write-Host "Este host no está infrautilizado"}