Move-VM cmdlet终止错误输出、循环执行逻辑及错误捕获规则问询
Move-VM 相关问题解答
1. Move-VM cmdlet 运行过程中出现终止错误的输出
- 控制台会打印完整的错误记录,包含错误描述、触发错误的命令、报错位置堆栈等信息
- 该错误对象会被自动写入PowerShell内置的
$Error列表的首位,可后续调取查看详情 - 若没有配置对应的错误捕获逻辑,脚本会在错误触发位置直接终止运行
2. 带-ErrorAction Stop参数的Move-VM在foreach循环中的执行逻辑
脚本不会停止整体执行,会继续后续的循环迭代。
原理是:-ErrorAction Stop会将Move-VM运行产生的非终止错误升级为可被捕获的终止错误,该错误被Try/Catch块捕获后,只会中断当前Try块内的剩余代码,执行完Catch块内的自定义逻辑后,会继续运行Try/Catch结构之后的代码,也就是进入下一轮循环迭代。
你给出的示例代码结构如下:
foreach ($vms) { Try { Move-VM -VM $vm_name -Datastore $datastore -ErrorAction Stop } Catch { #do something } }
3. -ErrorAction SilentlyContinue参数下Catch块的错误捕获能力
Catch块无法捕获对应的错误。
PowerShell的Try/Catch仅能捕获终止错误,-ErrorAction SilentlyContinue的作用仅为抑制错误信息的控制台输出,不会将运行产生的错误升级为终止错误,所以不会触发Catch块执行,错误只会被静默写入$Error列表中。
内容的提问来源于stack exchange,提问作者T M Suhas
相关产品推荐
相关产品推荐

