- ベストアンサー
powershellのパイプでテキストデータを渡す
powershellのパイプはオブジェクトを渡しますが、 従来シェルと同様にテキストデータを渡すことはできるのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
調べてみました。 できますが、文字コードの関係で一工夫必要です。 ASCIIならCMD.EXEと同じで大丈夫です。 PS C:\Users\User1> cmd /c echo test | more.com test しかし日本語は文字化けします。 PS C:\Users\User1> cmd /c echo テスト | more.com ??? 原因は$OutputEncodingがUS-ASCIIになっているからだそうです。 そこでこれをシフトJISにすればいいのですが、いちいちUS-ASCIIに戻すのは面倒なので子スコープを使うことにします。 なお、シフトJISのエンコーディングになっているものとしては[console]::OutputEncodingがあるのでそれを使います。 PS C:\Users\User1> &{$outputencoding=[console]::outputencoding; cmd /c echo テスト | more.com} テスト 参考にした資料は以下のとおりです。 http://blog.livedoor.jp/hentaiga/archives/51624750.html http://scripting.cocolog-nifty.com/blog/2010/05/powershell-9c98.html 【改訂新版】 Windows PowerShell ポケットリファレンス(技術評論社)
その他の回答 (2)
- queuerev2
- ベストアンサー率78% (96/122)
間違えてほとんど同じ内容を2回投稿してしまいました。 申し訳ありません。
- queuerev2
- ベストアンサー率78% (96/122)
ASCIIならCMD.EXEと同じで大丈夫です。 PS C:\Users\User1> cmd /c echo test | more.com test しかし日本語は文字化けします。 PS C:\Users\User1> cmd /c echo テスト | more.com ??? そこで調べてみると、参考URLの情報が見つかりました。 以下参考URLほとんどそのままです。 原因は$OutputEncodingがUS-ASCIIになっているからだそうです。 そこでこれをシフトJISにします。 シフトJISのエンコーディングになっているものとしては[console]::OutputEncodingがあるのでそれを使います。 PS C:\Users\User1> $outputencoding=[console]::outputencoding; cmd /c echo テスト | more.com テスト $OutputEncodingを戻すには以下のようにします。 PS C:\Users\User1> $outputencoding=new-object system.text.asciiencoding (&{ }で囲って子スコープを使えばテキストのパイプラインを使う時だけシフトJISにして終了後自動的US-ASCIIに戻せるので、その方が間違いないと思います。)
お礼
おお!できるのですね。できないと言うサイトがあったので 無理なのかなと思っていたのですが。感謝です。