我有一个Azure powershell脚本来启动VM列表。当它运行时,它成功启动了列表中的第一个VM,然后什么也没有启动。没有错误报告,似乎永远不会从启动命令返回
代码如下:
cbind
在运行时,它会输出“正在启动VM ... VM1”,它将先启动VM,然后什么也不会...
答案 0 :(得分:1)
听起来您的Start-AzureVM
通话只是等待VM完成启动。
也就是说, Start-AzureVm
默认是阻塞同步操作-尽管其名称为 [1]
要使其异步,请使用-AsJob
开关,该开关使用后台作业来启动VM;创建该作业后,调用结束,并返回一个 job对象,您可以稍后通过常用的*-Job
cmdlet(例如Receive-Job
)来跟踪启动过程
[1]关于名称Start-AzureVM
:
这是用词不当,因为PowerShell的命名法要求Start
动词表现出异步行为:
调用vs.开始
Invoke
动词用于执行通常是同步操作的操作,例如运行命令。 动词Start
用于启动通常是异步操作的操作,例如启动进程。
请注意,核心Start-Sleep
cmdlet的命名也类似。
对于默认情况下的同步行为,没有好的命名解决方案,因为名称Invoke-AzureVm
会令人困惑。
更好的方法(显然是一项重大更改)将是使cmdlet默认为“异步” ,并提供-Wait
开关以选择加入同步操作。 / p>