PowerShellスクリプトファイル(ps1)の標準入力へリダイレクトする方法

次のような対話型のPowerShellスクリプトファイルがあったとする。

# hello.ps1

$name = Read-Host your name
"Hello $name" | Write-Host

Read-Hostで標準入力からユーザの入力を取得している。このスクリプトの呼び出し時に入力を渡して対話を自動化したい。

失敗例

> "Hinata" | .\hello.ps1
your name: 

スクリプトファイルの呼び出しではパイプラインで文字列を渡しても標準入力にリダイレクトされない。パイプラインの内容は標準入力とは別に$input変数に格納されている。

成功例

> "Hinata" | powershell .\hello.ps1
your name: Hinata
Hello Hinata

スクリプトの呼び出しではなく、PowerShell実行ファイルにパイプラインで渡して実行させると標準入力にリダイレクトされる。

ただし実行環境が呼び出し元と異なる可能性があることに注意が必要。

> Get-Content .\input.txt | powershell .\hello.ps1

入力元をテキストファイルにする例。改行はEnterキーを押したように処理される。

コメント