dポイントプレゼントキャンペーン実施中!

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

A 回答 (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/516247 …
http://scripting.cocolog-nifty.com/blog/2010/05/ …
【改訂新版】 Windows PowerShell ポケットリファレンス(技術評論社)

参考URL:http://blog.livedoor.jp/hentaiga/archives/516247 …
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/10/10 17:14

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


申し訳ありません。
    • good
    • 0

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/516247 …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!