gpt4 book ai didi

powershell - 如何抑制 PowerShell cmdlet (Move-VM) 结果?

转载 作者:行者123 更新时间:2023-12-02 23:05:15 25 4
gpt4 key购买 nike

我正在编写一个 PowerShell 脚本,以使用实时迁移将 VM 从指定主机顺序移出并移到其他集群主机上。

运行命令是 Move-VM(或 Move-SCVirtualMachine),它是 VirtualMachineManager 模块的一部分。但是,当我运行此 cmdlet 时,它总是将结果返回到控制台,而我想禁止这样做。我不想丢失命令返回的信息。

命令

移动-VM -VM $vmToMigrate -VMHost $destinationHost

$move = (Move-VM -VM $vmToMigrate -VMHost $destinationHost)

无论命令结果是成功还是失败,都会向控制台返回信息。我的脚本结合了如何根据存储在 $move 中的结果进行处理的逻辑,所以我想要 Move-VM 的结果,我只是不希望它们回显到控制台。我试过了

($move = (Move-VM -VM $vmToMigrate -VMHost $destinationHost)) |出空

但是 Move-VM 返回的信息都没有被捕获; $move 的值为 null。

存储 Move-VM 返回结果的最佳方式是什么,而不完全丢弃 cmdlet 返回的内容,同时抑制其输出到控制台?我想避免让我的脚本输出 this .

谢谢!!

更新:

  1. 我已尝试使用 -ErrorAction SilentlyContinue 或设置 $ErrorActionPreference,但如果出现错误,则不会将任何输出存储到 $move 。我仍然想要 Move-VM 的输出,所以我可以检查 $move 并根据不同类型的故障执行不同的逻辑。

  2. 我意识到我实际上是在尝试完成 VMM 的维护模式所做的事情(从主机中撤出所有虚拟机并将它们迁移到集群中的其他位置)。但是,VMM 2012 SP1 尝试一次将多个 VM 迁移到/从 Server 2008R2 主机迁移,这不能同时支持更多的 1 进 1 出迁移。因此,迁移失败,VMM 将尝试重新执行另一组迁移。从本质上讲,VMM 陷入了故障循环。该脚本通过以编程方式一次仅迁移一个 VM 来避免这种情况。

最佳答案

您可能希望将该命令包装在对 powershell 的调用中,例如:

powershell -command { write-host "a" }  | out-null

$out = powershell -command { write-host "a" }

您不会看到正在打印的 a

但是当你这样做的时候

write-host "a" | out-null

你会看到a

关于powershell - 如何抑制 PowerShell cmdlet (Move-VM) 结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14508055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com