Question

J'ai un petit script Powershell qui est utilisé pour arrêter mes machines virtuelles en cas de panne de courant prolongée.Il prend un objet VM spécifique et force un arrêt.

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

Je voudrais accélérer ce processus en utilisant la commande start-job pour exécuter toutes ces tâches en parallèle.J'ai essayé d'utiliser plusieurs variantes dont les suivantes que je pense être correctes.

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

D'après la sortie de Receive-Job, il semble que le problème soit que le composant logiciel enfichable utilisé (ajouté avant que la fonction ci-dessus ne soit appelée) n'est pas chargé dans le contexte de Start-Job.

Quelle est la syntaxe correcte pour y parvenir?

Était-ce utile?

La solution

Bien que j'apprécie le désir d'utiliser le sous-système de tâches de PowerShell v2 pour cette tâche, notez que vCenter dispose d'un système de tâches intégré dont vous pouvez profiter ici.La plupart des applets de commande PowerCLI qui modifient votre environnement ont un paramètre RunAsync.Pour savoir lesquels, exécutez ce morceau de code PowerShell:

get-help * -parameter runasync

Le paramètre RunAsync prendra vos commandes et les mettra en file d'attente dans vCenter.La cmdlet renverra un objet de tâche, puis renverra immédiatement le contrôle de votre script.

Pour transformer cela en une réponse dans votre cas, ajoutez simplement "-runasync" à la fin de votre commande Stop-VM, comme ceci:

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

Autres conseils

Chaque fois que vous démarrez une tâche, PowerShell crée un nouvel espace d'exécution.Cela signifie un nouvel environnement que vous devrez peut-être initialiser, et qui inclut le chargement des composants logiciels enfichables et la connexion à votre VI Serveur.Start-Job a un paramètre que vous pouvez utiliser ici appelé InitializationScript.Essayez quelque chose comme ceci:

Start-Job -InitializationScript { Add-PSSnapin VMware.VimAutomation.Core } {
    Connect-ViServer myserver
    Get-VM foo | Stop-VM
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top