22

その質問をウェブで検索したところ、Server Fault にたどり着きました。

画面セッションで実行中のアクティブなプロセスの STDIN にテキストを送信できますか?

Linuxでこれを達成するのはとてつもなく簡単なようです。しかし、Win32 コマンド プロンプトには必要です。

背景: STDIN をポーリングするアプリケーションがあり、xキーを押すとアプリケーションが終了します。ここで、自動化されたテストを実行し、アプリケーションをテストしてからシャットダウンしたいと考えています。

: 現在、アプリケーションのシャットダウン中に発生する問題を調査しているため、プロセスを強制終了することはできません。

4

1 に答える 1

26

.NET フレームワークのProcessおよびProcessStartInfoクラスを使用して、プロセスを作成および制御できます。Windows PowerShell を使用して .NET オブジェクトをインスタンス化できるため、プロセスのほぼすべての側面を制御する機能を PowerShell 内から利用できます。

dirコマンドをプロセスに送信する方法は次cmd.exeのとおりです (これを .ps1 ファイルにラップしてから、スクリプトを実行してください)。

$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
于 2013-04-19T08:15:22.303 に答える