web-dev-qa-db-ja.com

Windows PowerShellでの標準入出力のリダイレクト

Windows PowerShellで標準の入力/出力をリダイレクトするために必要な構文は何ですか?

Unixでは、次を使用します。

$./program <input.txt >output.txt

PowerShellで同じタスクを実行するにはどうすればよいですか?

35
Nitin

ファイルを直接stdinにフックすることはできませんが、stdinにはアクセスできます。

Get-Content input.txt | ./program > output.txt
45
JasonMArcher

出力のリダイレクトには、次を使用できます。

  command >  filename      Redirect command output to a file (overwrite)

  command >> filename      APPEND into a file

  command 2> filename      Redirect Errors 

入力リダイレクトは別の方法で機能します。たとえば、このコマンドレットを参照してください http://technet.Microsoft.com/en-us/library/ee176843.aspx

8
iSamnium

大きなファイル(私のように)の「Get-Content」の代替を探している人がいる場合、PowerShellでCMDを使用できます。

cmd.exe /c ".\program < .\input.txt"

または、次のPowerShellコマンドを使用できます。

Start-Process .\program.exe -RedirectStandardInput .\input.txt -NoNewWindow -Wait

同じウィンドウでプログラムを同期的に実行します。しかし、PowerShellスクリプトで実行すると、常にコマンドがデータをコンソールに書き込むため、このコマンドの結果を変数に書き込む方法を見つけることができませんでした。

編集:

Start-Processから出力を取得するには、optionを使用できます

-RedirectStandardOutput

出力をファイルにリダイレクトし(js2010で推奨)、ファイルから読み取ります:

Start-Process ".\program.exe" -RedirectStandardInput ".\input.txt" -RedirectStandardOutput ".\temp.txt" -NoNewWindow -Wait
$Result = Get-Content ".\temp.txt"
0
tscissors

これを実行して、標準エラーと標準出力を同じ場所に移動させることもできます。

get-childitem foo 2>&1>ログ

「>」は「| out-file」と同じであり、デフォルトではエンコードはunicodeまたはutf 16であることに注意してください。同じテキストファイルでasciiとunicodeを混在させることもできるため、「>>」にも注意してください。 「| add-content」はおそらく「>>」よりも適切に機能します。 「|」よりも「| set-content」の方が望ましい場合があります。

現在6つのストリームがあります。詳細: https://docs.Microsoft.com/en-us/powershell/module/Microsoft.powershell.core/about/about_redirection?view=powershell-5.1

できるのは、テキストファイルに保存してから変数に読み込むだけだと思います。

0
js2010