Назад | Перейти на главную страницу

Улучшения сценария Powershell

У нас есть 4 кластера Hyper-V, и я создал сценарий для включения объектов виртуальных машин в этих кластерах Hyper-V.

Сценарий работает нормально, за исключением того, что он включит только все виртуальные машины в первом кластере, а не следующие.

Есть ли способ, позволяющий запускать виртуальные машины одновременно на нескольких кластерах.

$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
        }
    }
}

Ты можешь использовать Start-Job для запуска командлета или блока скрипта в фоновом режиме:

$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 для тестирования).