2

ライブ マイグレーションを使用して、VM を指定したホストから別のクラスター ホストに順次移動する PowerShell スクリプトを作成しています。

操作コマンドは、VirtualMachineManager モジュールの一部である Move-VM (または Move-SCVirtualMachine) です。ただし、このコマンドレットを実行すると、常に結果がコンソールに返されるので、これを抑制したいと考えています。コマンドが返す情報を失いたくありません。

コマンド

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コンソールへの出力を抑制しながら、コマンドレットが返すものを完全に破棄せずに、によって返された結果を保存する最良の方法は何ですか? スクリプトがthisを出力しないようにしたい。

ありがとう!!

アップデート:

  1. を使用-ErrorAction SilentlyContinueまたは設定しようとし$ErrorActionPreferenceましたが、エラーが発生した場合、出力は に保存されません$move。の出力が必要なので、さまざまな種類の障害に基づいてさまざまなロジックをMove-VM調べて実行できます。$move

  2. 基本的に、VMM のメンテナンス モードが行うこと (すべての VM をホストから退避させ、クラスター内の別の場所に移行する) を達成しようとしていることに気付きました。ただし、VMM 2012 SP1 は、Server 2008R2 ホストとの間で一度に複数の VM を移行しようとします。これは、一度に複数の VM を移行することはできません。したがって、移行は失敗し、VMM は別のグループの移行を再実行しようとします。基本的に、VMM は障害ループに陥ります。このスクリプトは、一度に 1 つの 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 に答える