azure之Powershell脚本仅启动列表中的第一个VM
我有一个 Azure powershell 脚本来启动 VM 列表。当它运行时,它会成功启动列表中的第一个虚拟机,然后什么也没有。没有报告错误,它似乎永远不会从启动命令返回
代码如下:
$vmList = "VM1", "VM2", "VM3"
Write-Output "Starting VMs in '$($AzureResourceGroup)' resource group";
Foreach ($vm in $vmList)
{
Write-Output "Starting VM...$vm"
$result = Start-AzureRmVM -Name $vm -ResourceGroupName AzureResourceGroup
Write-Output "Result of Start VM...$result"
}
当此运行时,它输出“正在启动 VM....VM1”,它启动 VM,然后什么也没有...
请您参考如下方法:
听起来您的 Start-AzureVM 调用只是等待虚拟机完成启动。
也就是说,Start-AzureVm 默认情况下是一个阻塞、同步操作 - 尽管它的名称是[1]
要使其异步,请使用-AsJob开关,该开关使用后台作业来启动VM;创建该作业后,调用就会结束,并返回一个作业对象,您可以使用该对象稍后通过常用的 *-Job cmdlet 来跟踪启动进度,例如Receive-Job .
[1] 关于名称 Start-AzureVM:
这是一个用词不当,因为 PowerShell 的命名法要求使用 Start 动词来表现异步行为:
Invoke vs. Start The
Invokeverb is used to perform an operation that is generally a synchronous operation, such as running a command. TheStartverb is used to begin an operation that is generally an asynchronous operation, such as starting a process.
请注意,核心 Start-Sleep cmdlet 的命名也同样错误。
对于默认同步行为,没有好的命名解决方案,因为名称 Invoke-AzureVm 会令人困惑。
更好的方法(这显然是一个重大更改)是让 cmdlet 默认情况下异步,并提供一个 -Wait 开关来选择加入同步操作。
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。



