2

我正在编写一个 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

谢谢!!

更新:

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

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

4

5 回答 5

2

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

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

或者

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

您将看不到a正在打印的内容。

但是当你这样做时

write-host "a" | out-null

你会看到a

于 2013-01-24T18:22:56.433 回答
1

您可以将输出重定向到文件吗?仅限 PS V3:

#Invalid command:
ping -rrfrfr *> $env:temp\test.txt 
$? # last execution status will be false

ping google.com *>> $env:temp\test.txt 
$?  #true as command is valid

$resu=gc $env:temp\test.txt
$resu
于 2013-01-24T19:00:14.353 回答
1

尝试:

$move = Move-VM -VM $vmToMigrate -VMHost $destinationHost 2> err.txt

这将返回正常的 stdout 输出,$move并将错误放入文件中。如果您根本对错误不感兴趣,那么:

$move = Move-VM -VM $vmToMigrate -VMHost $destinationHost 2> $null
于 2013-01-24T19:00:28.827 回答
1

分配给变量是我在脚本中抑制不需要的输出的方式。如果失败,我总是在我的函数调用之前加上[void],如下所示:

[void]Move-VM -VM $vmToMigrate -VMHost $destinationHost
于 2015-03-09T15:00:10.710 回答
0

只需在脚本中设置 ProgressPreference 变量,这将不会显示迁移的进度,并且只需在命令后使用管道并将 out-null 用于例如:

Set-Variable ProgressPreference SilentlyContinue
Move-VM -VM $vm -Destination $destination_srv >$null or out-null

谢谢

于 2021-09-22T14:13:09.643 回答