1

私はpowershellを始めたばかりです。そして、サーバーを監視するスクリプトを作成しました。ただし、サーバーからハードディスクと RAID 構成を監視する必要もあります。これは、HP のソフトウェアでのみ実行できます。

だから私が欲しいもの:
アレイとディスクを監視するために使用できるHPのコマンドラインユーティリティがあります。このユーティリティを起動すると、次のようになります。

PS C:\Program Files (x86)\Compaq\Hpacucli\Bin> .\hpacucli.exe controller slot=3 physicaldrive "1I:0:1 (port 1I:box 0:bay  1, 750 GB)" show status | out-host 
physicaldrive 1I:0:1 (port 1I:box 0:bay 1, 750 GB): OK

この出力を変数としてスクリプトでさらに使用したいだけです。

これはどのように行うことができますか。

私は試した:

$disk1 = "c:\program files (x86)\Compaq\hpacucli\bin\hpacucli.exe controller slot=3 physicaldrive "1I:0:1 (port 1I:box 0:bay  1, 750 GB)" show status | out-host"

しかし、これはうまくいきませんでした

physicaldrive 1I:0:1 (port 1I:box 0:bay 1, 750 GB): OKだから私は変数として持ちたいだけです。

誰かが私を助けてくれることを願っています。そのため、powershell の使い方をさらに学ぶことができます。

もうありがとう。デニス

4

1 に答える 1

3

out-hostexeの出力を消費しているため、コマンドレットを取り除きます。

$disk1 = .\hpacucli.exe controller slot=3 physicaldrive "1I:0:1 (port 1I:box 0:bay 1, 750 GB)" show status

PowerShell では、パイプラインを呼び出して出力がある場合は常に、出力ストリームに送られ、変数 (上記のように) によってキャプチャされるか、出力がキャプチャされない場合は画面に表示されることに注意してください。にパイプするとOut-Host、通常の出力がバイパスされ、入力が「直接」画面に表示されます。そのため、データを変数にキャプチャすることはできません。

関数では、変数にキャプチャされない (または $null にリダイレクトされる) 出力を生成するすべてのステートメントがその関数の出力を生成するため、これは従来の言語とは少し異なります。初めて PowerShell を使用する多くのユーザーは、関数が予想以上の結果を返すことに驚くかもしれません。詳細については、この SO の質問に対する受け入れられた回答を参照してください。

于 2012-10-07T17:56:32.323 に答える