or1ko's diary

日々を書きます

PowerShellでいらいらすること8つ

PowerShellは非常に便利なツールなので、ついつい使い倒そうとしてしまうが、
そういって失敗し、イライラすることがよくある。それらを下記に列挙する。

1. 日本語がいまいち
PowerShellはShift-JISとEucがデフォルトで読めないし書けない。UTF-8にシステムが増えてきているが、未だShift-JISとEUCのファイルは一杯ある。それらを変換なしで読むことができないのは苦痛だ。.Netのライブラリで読みことは可能なのに、なぜPowerShellはできないのかとしばしば憤りを感じ、日本語が現れるときはPowerShellを使うの控える

2. デフォルトがUTF16なところが嫌だ
PowerShellは基本的にUTF16を使う。何も指定しなければ、UTF16でファイル出力する。UTF16は普段お目にかからないエンコーディングだ。このあとの扱いに一手間いったり、UTF8で出力しなおしたりする。そもそも、色々とShift-JISで動くプログラがあるので、Shift-JISで出力したい。

3. なんか勝手に省略されたり、除去される。
Get-Command > test.txtと実行してみほしい。Definitionが勝手に省略されてしまう。out-fileのwidthパラメータを調整すれば省略されることはなくなるが、今度は不要な空白が残る。私はこの問題の根本的な回避方法をしらない。

4. <が使えない。
今後の使用のために予約されているらしい。get-content in.txt | commandという風にしている。

5. 巨大なファイルを読み込んでプログラムに渡してはならない
ただget-content huge.txt | python test.hsという風に記載してはらなない。このように記載すると一度オブジェクトに変換するため無駄に時間がかかってしまう。そんな時はカッコ悪いけど、cmdを実行してからプログラムを読んで、終わったらexitでPowershellに戻っている。

6. 遅い
cmdに比べ単純に遅い。起動も処理も全部重い。

7. 配列やパイプラインの解釈がわからない
かなり融通を効かせて解釈してくれる。が、それの副作用なのか、時たまうまくパイプラインが書けないことにはまって、本当にイライラする。

8. Excelに書き出したい
不満ではないがとにかく処理結果をExcelで書き出したいし、それを読み込みたい。処理結果を最後にファイルへ出力したくなるのが常だが、excelには吐き出すの大変だし、上述した文字の打ち切りもあるしで、最後の最後でやはりイライラする。new-object "application.excel"して処理する方法もあるが、それをするくらいならconvertTo-Csvして、中身をExcelにコピペする。