プロセスを起動し、出力を変数に読み込むことができる必要があります。次に、コマンドの戻り値に基づいて、完全な出力を表示するか、選択したサブセットのみを表示するかを選択できます。
明確にするために、テキストベースのプロセス (実際には psexec) を起動し、そのコマンドからの出力 (stdout、stderr など) をコンソールに直接出力するのではなく、変数に読み込みます。
プロセスを起動し、出力を変数に読み込むことができる必要があります。次に、コマンドの戻り値に基づいて、完全な出力を表示するか、選択したサブセットのみを表示するかを選択できます。
明確にするために、テキストベースのプロセス (実際には psexec) を起動し、そのコマンドからの出力 (stdout、stderr など) をコンソールに直接出力するのではなく、変数に読み込みます。
プロセスの種類に関する詳細は省きましたが、Powershell チーム ブログのこの記事System.Diagnostics.Process
には、実行可能ファイルの出力をどこかにパイプするか、 .
2 番目のオプションがあなたのやりたいことのように思えたので、クラスを使用してプロパティとしてProcessStartInfo
フィードし、オブジェクト のプロパティから読み取って、出力に対して必要なことを行うことができます。同じように動作します。true
RedirectStandardOutput
StandardOutput
Process
StandardError
変数への読み込みに関する限り、次のようなことができるはずです
$output = ps
ただし、これは stdout のみをキャプチャし、冗長、警告、またはエラー ストリームはキャプチャしません。特殊変数をテストすることで、前のコマンドの終了コードを取得できます$?
。
より完全な回答を提供するにはもう少し情報が役立つと思いますが、これがあなたが探しているものへの何らかの方法であることを願っています.
PowerShell Community ExtensionsにはStart-Processが含まれています。これは実際にはSystem.Diagnostics.Processを返します。
> $proc = Start-Process pslist -NoShellExecute
ただし、これはProcessオブジェクトを返しますが、実行前に出力をリダイレクトすることはできません。これを行うには、独自のプロセスを作成し、最初にProcessStartInfoメンバーを変更して実行します。
> $proc = New-Object System.Diagnostics.Process
> $proc.StartInfo = New-Object System.Diagnostics.ProcessStartInfo("pslist.exe")
> $proc.StartInfo.CreateNoWindow = $true
> $proc.StartInfo.UseShellExecute = $false
> $proc.StartInfo.RedirectStandardOutput = $true
> $proc.Start()
> $proc.StandardOutput.ReadToEnd()