我正在编写一个 PowerShell 脚本,以使用 Live Migration 将 VM 从指定主机顺序移出并移至其他群集主机。
操作命令是 Move-VM(或 Move-SCVirtualMachine),它是 VirtualMachineManager 模块的一部分。但是,当我运行此 cmdlet 时,它总是将结果返回到我想抑制的控制台。我不想丢失命令返回的信息。
命令
Move-VM -VM $vmToMigrate -VMHost $destinationHost
和$move = (Move-VM -VM $vmToMigrate -VMHost $destinationHost)
无论命令的结果是成功还是失败,都会向控制台返回信息。我的脚本包含有关如何根据存储在中的结果进行处理的逻辑$move
,所以我想要 的结果Move-VM
,我只是不希望它们回显到控制台。我努力了
($move = (Move-VM -VM $vmToMigrate -VMHost $destinationHost)) | out-null
Move-VM
但没有捕获到返回的信息;的值为$move
空。
存储返回的结果的最佳方法是Move-VM
什么,而不完全丢弃 cmdlet 返回的内容,同时抑制其输出到控制台?我想避免让我的脚本输出this。
谢谢!!
更新:
我尝试过使用
-ErrorAction SilentlyContinue
或设置$ErrorActionPreference
,但如果出现错误,则不会将输出存储到$move
. 我仍然想要 的输出Move-VM
,因此我可以$move
根据不同类型的故障检查和执行不同的逻辑。我意识到我实际上是在尝试完成 VMM 的维护模式所做的事情(从主机中撤出所有 VM 并将它们迁移到集群中的其他位置)。但是,VMM 2012 SP1 尝试一次将多个 VM 迁移到 Server 2008R2 主机/从 Server 2008R2 主机迁移,这一次无法支持多于 1 进 1 出的迁移。因此,迁移失败,VMM 将尝试重新执行另一组迁移。从本质上讲,VMM 陷入了故障循环。该脚本通过以编程方式一次仅迁移一个 VM 来避免这种情况。