一元化されたデバイスで実行する小さなプログラムを作成しようとしています。このプログラムは実行されます
"psexec \ server(s)netstat -na | findstr" LISTENING ""
リモートノードからnetstatデータを収集し(出力を文字列にリダイレクトする必要があります)、データを解析して既知のリストと比較します。psexec
上記のcmdは、cmd行から問題なく実行できますが、C#プログラム内のプロセスと同じコマンドを実行しようとすると、解析対象のデータが返されません。が実行されていることはわかりますnetstat
が(cmdウィンドウがnetstatの結果とともに点滅します)、process.standardoutputがストリームをキャッチしていません。pingまたはそれ以外のものを使用する場合psexec
引数として、ストリームがキャッチされ、結果がテキストボックスに表示されます。また、ファイル名をpsexec.exeに設定して引数を指定しようとしましたが、同じ結果が得られます。最後になりましたが、引数なしでpsexecを実行すると、テキストボックスにヘルプキックバック情報が返されます。これはpsexec.exe
、ファイル名として実行している場合、またはcmd.exe
「/cpsexec」を。として指定してファイル名として実行している場合に当てはまりますargs
。
この時点でローカルで実行するときに、psexec出力をキャッチしようとしています。後でリモートマシンへのpsexecについて心配します。どんな助けでも大歓迎です。
コードは次のとおりです。
System.Diagnostics.Process pProcess = new System.Diagnostics.Process();
pProcess.StartInfo.FileName = "cmd.exe";
pProcess.StartInfo.Arguments = "/c psexec netstat";
pProcess.StartInfo.UseShellExecute = false;
pProcess.StartInfo.RedirectStandardOutput = true;
pProcess.Start();
string strOutput = pProcess.StandardOutput.ReadToEnd();
pProcess.WaitForExit();
if (pProcess.HasExited)
{
textBox1.Text = strOutput;
}
else
{
textBox1.Text = "TIMEOUT FAIL";
}