在powershell / powercli中使用invoke-vmscript时多线程foreach循环

时间:2018-05-24 18:32:49

标签: powershell powercli

我有一个脚本可以修改某些虚拟机的网络信息,但是它会按顺序运行。由于有数百个虚拟机,我希望所有虚拟机同时执行命令以节省时间。另外,如何使用外部变量将invoke-vmscript添加到scriptblock。我确实尝试了一些东西,但似乎没有运作良好。脚本在Linux上使用powercli 10的系统上运行,不允许安装其他模块

以下是代码,非常感谢任何帮助

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

0 个答案:

没有答案