Pregunta

Tengo un pequeño script PowerShell que se utiliza para cerrar mis máquinas virtuales en caso de un corte de energía extendido. Se necesita un objeto VM específico y obliga a un apagado.

Function DirtyShutdown
{ param([VMware.VimAutomation.ViCore.Impl.V1.Inventory.VirtualMachineImpl]$VM )
$VM | Stop-VM -Confirm:$false
}

Me gustaría acelerar este proceso utilizando el comando START-JOB para ejecutar todas estas tareas en paralelo. He intentado usar varias variantes, incluida la siguiente, que creo que es correcta.

Start-Job -InputObject $VM -ScriptBlock{ $input | Shutdown-VMGuest -Confirm:$false }

Según la salida Recibe-Job, parece que el problema es el SNAP en uso (agregado antes de que se llame la función anterior) no se carga en el contexto de inicio-JOB.

¿Cuál es la sintaxis correcta para que esto suceda?

¿Fue útil?

Solución

Si bien aprecio el deseo de usar el subsistema de trabajo de PowerShell V2 para esta tarea, tenga en cuenta que vCenter tiene un sistema de trabajo incorporado que puede aprovechar aquí. La mayoría de los cmdlets de PowerCli que realizan un cambio en su entorno tienen un parámetro RunAsync. Para saber cuáles, ejecute este código de PowerShell:

get-help * -parameter runasync

El parámetro RunAsync tomará sus comando (s) y los hará cola en vCenter. El cmdlet devolverá un objeto de tarea e inmediatamente devolverá el control a su script.

Para convertir esto en una respuesta en su caso, simplemente agregue "-Runasync" al final de su comando stop-vm, como así:

$VM | Stop-VM -Confirm:$false -RunAsync

Otros consejos

Cada vez que comienzas un trabajo, PowerShell crea un nuevo espacio de ejecución. Esto significa un nuevo entorno que es posible que necesite inicializar, y eso incluye la carga de SNAP y conectarse a su servidor VI. Start-Job tiene un parámetro que puede usar aquí llamado Initializationscript. Prueba algo como esto:

Start-Job -InitializationScript { Add-PSSnapin VMware.VimAutomation.Core } {
    Connect-ViServer myserver
    Get-VM foo | Stop-VM
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top