我正在编写一个PowerShell脚本,以便顺序地将‘m从指定主机移出并使用Live转移到其他集群主机上。
操作命令是Move-VM (或VirtualMachineManager ),它是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的值为null。
存储Move-VM返回的结果的最佳方法是什么,而不完全放弃cmdlet返回的内容,同时将其输出压缩到控制台?我希望避免让我的脚本输出这。
谢谢!!
更新:
-ErrorAction SilentlyContinue或设置$ErrorActionPreference,但如果出现错误,则不会将输出存储到$move。我仍然需要Move-VM的输出,因此我可以检查$move并根据不同类型的故障执行不同的逻辑。发布于 2013-01-24 18:22:56
您可能希望在调用powershell时包装该命令,例如:
powershell -command { write-host "a" } | out-null或
$out = powershell -command { write-host "a" }您将不会看到a正在打印。
但当你做的时候
write-host "a" | out-null你会看到a
发布于 2013-01-24 19:00:14
您可以将输出重定向到文件吗?只限于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-24 19:00:28
尝试:
$move = Move-VM -VM $vmToMigrate -VMHost $destinationHost 2> err.txt这将将正常的stdout输出返回到$move,并将错误放入文件中。如果您对错误一点也不感兴趣,那么:
$move = Move-VM -VM $vmToMigrate -VMHost $destinationHost 2> $nullhttps://stackoverflow.com/questions/14508055
复制相似问题