Abbasのおかげで、次のコードにより、cmdSプロセスを呼び出してPowerShellスクリプトを使用してコマンドを渡すことができます。powershellのCMDプロセスID(PID)を使用してCMDに入力を渡す
$psi = New-Object System.Diagnostics.ProcessStartInfo;
$psi.FileName = "cmd.exe"; #process file
$psi.UseShellExecute = $false; #start the process from it's own executable file
$psi.RedirectStandardInput = $true; #enable the process to read from standard input
$p = [System.Diagnostics.Process]::Start($psi);
Start-Sleep -s 2 #wait 2 seconds so that the process can be up and running
$p.StandardInput.WriteLine("dir"); #StandardInput property of the Process is a .NET StreamWriter object
ここで、すでに存在するCMDプロセスを使用する方法を教えてください。
より良い言葉では、実行しているcmd.exeプロセスのPIDを使用して、コマンドを渡します。
私はコードが動作するはずだと思うCMDがSYSTEM
として実行されていることを確認したい、SYSTEMとして実行されているコマンドシェルをチェック:@ファルコンさんのコメントに基づいて
PowerShellをお持ちの場合、なぜcmdが必要なのですか? PowerShellができないことはあなたのために何をするつもりですか? –
@ JeroenMostert - 特定のレガシプログラムは、PowerShellから直接呼び出されたときに正しく応答しません。 PowerShellがクォートとパラメータの受け渡しをどのように処理するかが原因です。しかし、一般的には、プロセスを手に入れるのではなく、私のコマンドをバッチファイルに書き、それを '&" CMD/C $ batchfilename "'で呼び出すことにしました。 [スペースと引用符で囲まれたパラメータでPowerShellでEXEファイルを実行する方法]を参照してください(http://stackoverflow.com/questions/1673967/how-to-run-an-exe-file-in-powershell-with-parameters-スペース付き引用符)はここにあります。 –
@JeffZeitlin:私は、*既存の* cmdインスタンスとやりとりしたいと思ういくつかのシナリオを考えることができるので、具体的に質問しました。この場合、cmdの使用は完全に不要になるはずです。 –