Use PowerShell con máquinas virtuales Hyper-V para agregar memoria masiva

No es ningún secreto que Windows PowerShell se puede usar para reconfigurar una máquina virtual Hyper-V. Sin embargo, una de las cosas realmente geniales de PowerShell es que le permite administrar máquinas virtuales de forma masiva. Esto puede ser especialmente útil si toda una clase de cargas de trabajo necesita recursos adicionales (como la memoria).

Un cmdlet de PowerShell que se usa para ver el uso actual de la memoria de la VM Get-VMMemory. Hay varias formas diferentes de usar este cmdlet. Si está interesado en ver el uso de memoria para una sola máquina virtual, simplemente puede ingresar el cmdlet y luego el nombre de la máquina virtual. Si, por otro lado, desea ver el uso de memoria para todas las máquinas virtuales que se ejecutan en el servidor, debe comenzar ingresando el cmdlet Get-VM y luego usará la canalización para administrar el comando para generar el Get-VMMemory mando. El comando real se ve así:

Obtener máquina virtual | Get-VMMemory

La siguiente imagen muestra cómo trabajan ambos equipos.

Si bien es útil poder ver la cantidad de memoria que se ha asignado a la máquina virtual, también es útil poder cambiar la asignación de memoria de la máquina virtual. El cmdlet de PowerShell utilizado para esto Establecer-VMMemory. Aquí está la sintaxis completa del cmdlet:

Establecer-VMMemory [-VMMemory] [-Buffer <Int32>] [-DynamicMemoryEnabled <Boolean>]

[-MaximumBytes <Int64>] [-StartupBytes <Int64>] [-MinimumBytes <Int64>] [-Priority <Int32>]

[-MaximumAmountPerNumaNodeBytes <Int64>] [-ResourcePoolName <String>] [-Passthru] [-WhatIf] [-Confirm] [<CommonParameters>]

Como puede ver, este cmdlet es realmente flexible. Se puede utilizar para configurar el uso de memoria estática y dinámica. Dado que hay otras cosas que quiero entender, limitaré el alcance de mi discusión a la memoria estática. Sin embargo, si necesita configurar la memoria dinámica, aquí hay un ejemplo de esto Microsoft proporciona:

Set-VMMemory TestVM -DynamicMemoryEnabled $ true -MinimumBytes 64MB -StartupBytes 256MB -MaximumBytes 2GB -Prioridad 80 -Búfer 25

Entonces, dicho esto, veamos un ejemplo muy simple del uso de PowerShell para reconfigurar la memoria de la máquina virtual. Tengo una máquina virtual en mi servidor Hyper-V llamada Linux. Cuando uso el cmdlet Get-VMMemory, veo que la máquina virtual Linux actualmente tiene asignados 4 GB de memoria. Si quiero aumentar este número a 6 GB, puedo hacerlo con este comando:

Set-VMMemory Linux -StartupBytes 6GB

La siguiente figura muestra el uso de este comando. La figura también muestra el cambio que realizó el equipo en la cantidad de memoria asignada a la máquina virtual.

PowerShell con máquinas virtuales Hyper-V

Entonces, como puedes ver en la imagen, esta técnica funciona muy bien. El único problema es que el método que acabo de mostrarte no está muy bien escalado. La técnica funciona muy bien si necesita cambiar un par de máquinas virtuales, pero probablemente no quiera usar este método para reconfigurar miles de máquinas virtuales. Afortunadamente, no es necesario. PowerShell puede realizar operaciones masivas en varias máquinas virtuales.

El primer paso en esto es configurar una variable que contenga los nombres de todas las máquinas virtuales que necesitamos cambiar. Usaré una variable llamada $ VMs. La técnica utilizada para completar esta variable es ligeramente diferente dependiendo de si desea habilitar máquinas virtuales específicas o todas sus máquinas virtuales.

Si solo desea habilitar ciertas máquinas virtuales, el comando se verá así:

$ VM = ('VM1', 'VM2', 'VM3')

Puedes ver un ejemplo de esto en la siguiente imagen.

PowerShell con máquinas virtuales Hyper-V

Por otro lado, si desea guardar los nombres de todas las máquinas virtuales, deberá crear una variable temporal y luego pasar los nombres de la máquina virtual con la variable temporal a la variable $ VMs. Los equipos quedan así:

$ Temp = Obtener-VM

$ máquinas virtuales = $ nombre temporal

Así es como se ve esta técnica:

PowerShell con máquinas virtuales Hyper-V

Una vez que haya creado una variable que contenga los nombres de las máquinas virtuales que desea cambiar, el siguiente paso en el proceso es configurar un ciclo "para todos". El ciclo se basará en una lista de máquinas virtuales (variable $ VMs). Básicamente, esto le indicará a PowerShell que para cada máquina virtual en la lista de máquinas virtuales, realice una acción específica. Esta acción, por supuesto, es una modificación de la memoria.

Ya tenemos una variable ($ VMs) que representa nuestra lista de máquinas virtuales, pero también necesitamos una variable que represente una máquina virtual. Para ello usaré $ VM (sin S al final). El ciclo se verá así:

ForEach ($ VM a $ VM)

Ahora tenemos que decidir qué queremos que haga el ciclo. Si esta fuera la situación real, podríamos simplemente cambiar la memoria de la VM y finalizarla. Sin embargo, por el bien de la demostración, voy a mostrar el proceso. Entonces, mi bucle mostrará el nombre de la máquina virtual, mostrará la asignación de memoria actual, cambiará la asignación de memoria y luego mostrará la nueva asignación de memoria. Dado que se están siguiendo tantos pasos, voy a agregar esto al script. Así es como se verá mi script:

$ máquinas virtuales = ('Rep.1', 'Rep.2')

ForEach ($ VM a $ VM) {

$ máquina virtual

Get-VMMemory $ VM

Set-VMMemory $ VM -StartupBytes 10 GB

Get-VMMemory $ VM

}

Entonces, como puede ver, configuré la memoria para las máquinas virtuales Repl1 y Repl2 en 10 GB. La salida se muestra en la siguiente figura.

PowerShell con máquinas virtuales Hyper-V

Índice

La potencia de PowerShell se ha reducido

PowerShell es una interfaz fácil de usar para administrar máquinas virtuales Hyper-V. A pesar de esto, la ventaja real de usar PowerShell se obtiene solo cuando se administra una gran cantidad de recursos, como máquinas virtuales. Con solo siete líneas de código, PowerShell pudo automatizar el proceso de cambiar la asignación de memoria de una máquina virtual. En realidad, sin embargo, esto podría haberse hecho con dos líneas de código si hubiera escrito el script de manera diferente. Simplemente decidí escribir el guión en forma larga para que sea más fácil de entender.


Artículos de interés

Subir