Windows PowerShellで標準の入力/出力をリダイレクトするために必要な構文は何ですか?
Unixでは、次を使用します。
$./program <input.txt >output.txt
PowerShellで同じタスクを実行するにはどうすればよいですか?
ファイルを直接stdinにフックすることはできませんが、stdinにはアクセスできます。
Get-Content input.txt | ./program > output.txt
出力のリダイレクトには、次を使用できます。
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
大きなファイル(私のように)の「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"
これを実行して、標準エラーと標準出力を同じ場所に移動させることもできます。
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
できるのは、テキストファイルに保存してから変数に読み込むだけだと思います。