我们有 4 个 Hyper-V 集群,并且我已经创建了一个脚本来启动这些 Hyper-V 集群中的 VM 对象。
该脚本运行良好,但该脚本仅会启动第一个集群中的所有虚拟机,而不会启动后续的虚拟机。
有没有什么方法可以让我们同时在多个集群上启动虚拟机。
$clusters = Get-Content "c:\temp\Clusters.txt"
foreach ($clu in $clusters){
while($true)
{
write-host "Cluster VM resources bringing online for cluster $clu" -ForegroundColor Green
$c = Get-Cluster -name $clu | Get-ClusterResource | where { $_.Name -and $_.state -eq "offline"}
$count = $c.Length
write-host "Current Count: $count" -ForegroundColor Green
if ($count -eq 0){
break
}else{
echo $c[0..5] |Start-ClusterResource -ErrorAction SilentlyContinue -Verbose
Start-Sleep 20
}
}
}
答案1
您可以使用Start-Job
在后台运行 cmdlet 或脚本块:
$clusters = Get-Content "c:\temp\Clusters.txt"
foreach ($clu in $clusters) {
Start-Job -ScriptBlock {
Get-Cluster -name $clu | Get-ClusterResource | where { $_.Name -and $_.state -eq "offline"} |ForEach-Object {
$_ |Start-ClusterResource -ErrorAction SilentlyContinue -Verbose
}
}
}
这尚未经过测试(我没有可用于测试的 hyper-v 集群)。