一些 Azure PowerShell 命令的运行时间非常冗长;一个简单的任务(例如在虚拟机上设置静态 IP 地址)可能需要一分钟以上的时间(我猜这是因为命令实际上是在向 Azure 发送命令,并等待 Azure 执行请求的任务并报告);因此,尤其是当我需要大量使用它们(并进行独立操作)时,我会真的喜欢将它们作为后台作业运行,这样就可以向 Azure 发送多个请求并并行运行它们。
以该代码为例,它在多个虚拟机上设置了静态 IP 地址:
$vms = @{
"VM1"="192.168.0.11"
"VM2"="192.168.0.12"
"VM3"="192.168.0.13"
"VM4"="192.168.0.14"
"VM5"="192.168.0.15"
}
foreach ($vm in $vms.GetEnumerator())
{
get-azurevm $vm.Key | Set-AzureStaticVNetIP $vm.Value | Update-AzureVM
}
这需要永远,因为每个命令可能需要一分钟以上的时间,并且需要在执行下一个命令之前完成。
是否可以告诉 Azure cmdlet“只需返回并继续执行您需要的操作,然后报告”?
我尝试过使用Start-Job
,但这不起作用,因为后台作业不会继承父会话的环境,并且除了明显缺少的变量之外,这意味着它们没有登录到 Azure,因此无法执行任何命令。
答案1
后台运行空间应该适合您。
使用后台运行空间代替 PSJobs 以获得更好的性能
多线程 Powershell 脚本
http://thesurlyadmin.com/2013/02/11/multithreading-powershell-scripts/
服务器故障