Powershell脚本仅启动列表中的第一个VM

时间:2019-04-01 15:16:17

标签: azure powershell

我有一个Azure powershell脚本来启动VM列表。当它运行时,它成功启动了列表中的第一个VM,然后什么也没有启动。没有错误报告,似乎永远不会从启动命令返回

代码如下:

cbind

在运行时,它会输出“正在启动VM ... VM1”,它将先启动VM,然后什么也不会...

1 个答案:

答案 0 :(得分:1)

听起来您的Start-AzureVM通话只是等待VM完成启动

也就是说, Start-AzureVm默认是阻塞同步操作-尽管其名称为 [1]

要使其异步,请使用-AsJob开关,该开关使用后台作业来启动VM;创建该作业后,调用结束,并返回一个 job对象,您可以稍后通过常用的*-Job cmdlet(例如Receive-Job)来跟踪启动过程


[1]关于名称Start-AzureVM

这是用词不当,因为PowerShell的命名法要求Start动词表现出异步行为:

来自https://docs.microsoft.com/en-us/powershell/developer/cmdlet/approved-verbs-for-windows-powershell-commands(添加了重点):

  

调用vs.开始   Invoke动词用于执行通常是同步操作的操作,例如运行命令。 动词Start用于启动通常是异步操作的操作,例如启动进程。

请注意,核心Start-Sleep cmdlet的命名也类似。

对于默认情况下的同步行为,没有好的命名解决方案,因为名称Invoke-AzureVm会令人困惑。

更好的方法(显然是一项重大更改)将是使cmdlet默认为“异步” ,并提供-Wait开关以选择加入同步操作。 / p>