Powershell关闭VM

Tim*_*ham 3 powershell vmware powershell-2.0 powercli

我有一个小的Powershell脚本,用于在发生长时间断电时关闭我的虚拟机.它需要一个特定的VM对象并强制关闭.

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

我想使用start-job命令加速此过程并行运行所有这些任务.我尝试过使用以下几种变体,我认为这些变体是正确的.

Start-Job -InputObject $VM -ScriptBlock{ $input | Shutdown-VMGuest -Confirm:$false }
Run Code Online (Sandbox Code Playgroud)

基于Receive-Job输出,看起来问题是在Start-Job的上下文中没有加载正在使用的管理单元(在调用上述函数之前添加).

实现这一目标的正确语法是什么?

hal*_*000 6

虽然我很欣赏使用PowerShell v2的作业子系统完成此任务,但请注意,vCenter有一个内置的作业系统,您可以在此处利用它.执行环境更改的大多数PowerCLI cmdlet都具有RunAsync参数.要知道哪些,运行这段PowerShell代码:

get-help * -parameter runasync
Run Code Online (Sandbox Code Playgroud)

RunAsync参数将接受您的命令并在vCenter中将它们排队.cmdlet将返回一个任务对象,然后立即将控制权返回给您的脚本.

要在您的情况下将其转换为答案,只需在Stop-VM命令的末尾添加"-runasync",如下所示:

$VM | Stop-VM -Confirm:$false -RunAsync
Run Code Online (Sandbox Code Playgroud)