Многопоточный цикл foreach при использовании invoke-vmscript в powershell / powercli - PullRequest
0 голосов
/ 24 мая 2018

У меня есть скрипт, который изменяет информацию о сети определенных виртуальных машин, однако он работает последовательно.Поскольку существует сотни виртуальных машин, я хочу, чтобы все виртуальные машины выполняли команду одновременно, чтобы сэкономить время.Также, как мне добавить invoke-vmscript в блок скриптов с внешними переменными.Я пробовал несколько вещей, но, похоже, не работает хорошо.Скрипт запускается в системе, использующей powercli 10 в Linux, и никакие дополнительные модули не могут быть установлены

Ниже приведен код, любая помощь будет высоко ценится

$test=get-vm -name testvm* |sort-object
 $fip='192.168.10.41'
$f=$fip.Split(".")|select -first 3
$s=[system.String]::join(".",$f)
$l=$fip.Split(".")|select -last 1
foreach  ($vm in $test) {
Write-Host "$vm  $s.$l"
do {start-sleep -s 2; write-host " $vm not ready yet" ;  $tstatus=(get-vm 
$vm).extensiondata.Guest.ToolsStatus;}while($tstatus -ne "toolsOk");
invoke-vmscript -ScriptText "sed -i '14,20 d' /etc/network/interfaces" - 
ScriptType bash -VM $vm -GuestUser admin -GuestPassword Welcome!}
$ipscript = "sed -i -e  's/address *.*.*.*/address $s.$l/g' 
/etc/network/interfaces"
write-host " Adding IP "

invoke-vmscript -ScriptText  $ipscript -ScriptType bash -VM $vm -GuestUser 
$GuestUserName admin -GuestPassword Welcome! 
Start-Sleep -s 2
Restart-VM -VM $vm  -RunAsync -Confirm:$false
$l=[int]$l+1
}
...