• ベストアンサー

powershellのパイプでテキストデータを渡す

powershellのパイプはオブジェクトを渡しますが、 従来シェルと同様にテキストデータを渡すことはできるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • queuerev2
  • ベストアンサー率78% (96/122)
回答No.1

調べてみました。 できますが、文字コードの関係で一工夫必要です。 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 ポケットリファレンス(技術評論社)

参考URL:
http://blog.livedoor.jp/hentaiga/archives/51624750.html
omorinoya35234
質問者

お礼

おお!できるのですね。できないと言うサイトがあったので 無理なのかなと思っていたのですが。感謝です。

その他の回答 (2)

  • queuerev2
  • ベストアンサー率78% (96/122)
回答No.3

間違えてほとんど同じ内容を2回投稿してしまいました。 申し訳ありません。

  • queuerev2
  • ベストアンサー率78% (96/122)
回答No.2

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に戻せるので、その方が間違いないと思います。)

参考URL:
http://blog.livedoor.jp/hentaiga/archives/51624750.html

関連するQ&A