Windows PowerShellの爪の先ほどをかじってみる

PowerShell

DOS 時代は否が応でも DOS のコマンドを使わざるを得なかったので、その時代に DOS に慣れ親しんでた人は Windows のコマンドプロンプトも違和感なく使えてたんだけど、時代が変わってコマンドプロンプト廃止とかいう話が出てるようでマジかよって感じ。
コマンドプロンプトはとんでもなく使い勝手は悪いけど簡単だったのに・・
で、コマンドプロンプトから PowerShell に変わったら何がどうなるかっていうと 一番の大きな変更は「黒い画面だったのが青い画面になる」「コマンドがコマンドレットになる」これだ。

しらじらしいが、ちょっと触ってみる。
ファイルリストを表示するなら、コマンドプロンプトでは dir だったけど PowerShell では dir でも ls でも gci でもいける。というか、 PowerShell の由緒正しい?コマンドレットは Get-ChildItem で dir と ls と gci はそのエイリアス。
だから Get-ChildItem は DOS やコマンドプロンプトの dir と同等なんだなと思ったらこれが大違い。 Get-ChildItem はかなりクセモノ。

たとえば、次のコマンドだと普通にファイルリストが取れる。("-Path" は無くても大丈夫)

PS C:\Users\foobar> gci -Path c:\windows

ファイル名に ".dll" を含むファイルのリストを取りたいと思ったら次のコマンド。これも当然ながら思ったとおりに動く。

PS C:\Users\foobar> gci -Path c:\windows -Include "*.dll"

"-Include" を使わずに同じ結果を得ようとする場合、Unix系のシェルだと ls | grep ".dll" みたいにするんだけど、 PowerShell には grep が無いので代わりに Select-String (sls) を使う。
同じくファイル名に ".dll" を含むファイルのリストを取りたいと思って下のようにする。

PS C:\Users\foobar> gci -Path c:\windows | sls .dll

普通に考えたらこれでいけそうなんだけど、出力は全く意図しないとんでもないことに、ファイルを cat したみたい、 PowerShell でいえば Get-Content したみたいになってしまう。

PS C:\Users\foobar> gci -Path c:\windows -Name | sls .dll

"-Name" を追加してファイル名に限定してやる。これなら意図してたとおりに動く。

PowerShell ではコマンドプロンプトと同じく ipconfig などのコマンドも使える。ipconfig は system32 下の ipconfig.exe が実体だからコマンドプロンプトが廃止されても PowerShell で使い続けられるよね?大丈夫だよね。これも一緒に廃止になると不便で困るよ。

PS C:\Users\foobar> ipconfig /all

これはコマンドプロンプトと同じ結果を得られる。

コマンドプロンプトでは find と組み合わせると該当する文字列を含む行だけを取得できる。

C:\Users\foobar> ipconfig /all | find "ゲートウェイ"

これだと、「デフォルト ゲートウェイ」の行だけを表示できる。
しかし、同じコマンドを PowerShell で実行するとエラー。

PS C:\Users\foobar> ipconfig /all | sls ゲートウェイ

のように find を使う代わりに Select-String (sls) を使えばいける。

ところで、コマンドの途中で無駄に日本語が混じるのは打ちにくい。そして PowerShell の画面で日本語を入力すると半角分くらいが崩れて腹立たしいことこの上ない。とくに PowerShell ではコマンドレットを組み合わせて1行に長く打つので文字崩れは響く。これは早めに直してくれないとどうにも困る。

PowerShell で日本語モードと英語モードを切り替えるのは DOS やコマンドプロンプトと同じく chcp 437 (英語モード)、 chcp 932 (日本語モード)。さらに UTF-8 モードに切り替えるのは chcp 65001 だが、 Windows ではコマンドプロンプトもそうだが何故か UTF-8 モードだと日本語入力させて貰えなくなる。それじゃ意味なくない?

と、いうことで、英語モードで先程同様にipconfigで「デフォルト ゲートウェイ」の行を表示するなら下。

PS C:\Users\foobar> chcp 437
画面が切り替わる
PS C:\Users\foobar> ipconfig /all | sls gateway

当然だが英語モードでは「デフォルトゲートウェイ」は "Default Gateway" と表示されるのでそれを期待して sls (grep) する文字列は gateway になる。日本語を入力しなくて済むので打ちやすい。
入力面では英語モードを標準にしたいくらいだけど、そうすると日本語メッセージは化けて表示されてしまうのでつらいなぁ。

関連記事:

今更だがケータイの料金が高すぎる

父親から携帯料金が異常に高いからどうにかしたいという相談があった。
といっても4,5千円ということなので、「異常に」どころか全然高くないじゃんと思ったが、聞けばガラケーで通話は少なくメールもチョコチョコ届く程度の使い方とのこと。それだけなら確かに高いわな。

softbank料金1
話だけだと契約状況や料金の詳細がわからなかったのでMy Softbankで確認。
ホワイトプランNとかいうプランらしい。ホワイトプランってのは聞いたことがあるけどNって何?

softbank料金2
11月の料金明細を見た。通話料は普通というか安いと思うが、「パケットし放題」と「S!メール」が同額で請求されてて「パケットし放題」分がマイナスになっている。結果的には辻褄が合ってるということだろうが定額料金の請求としては意味のわからない項目の書き方。
で、パケット代があるのに「ウェブ使用料」とかいうものが別途取られている。Softbankのウェブには「ウェブ使用料は、iPhone・スマートフォンでMMS送受信、ウェブサイトの閲覧を行うために必要です。」って書かれているがケータイでも必要なの?よくわからん。
何にしろデータ通信を無しにして(パケット通信料の1565円を引いて)再計算すると2281円。データ通信無しでこれならずいぶん高いと思う。
母親はdocomoのケータイなんだけど、やはり通話とメールだけの使い方(つまりデータ通信あり)で2千円をようやく超えるくらいって言ってたので、なんでSoftbankとdocomoでそんなに料金に差があるのかよくわからない。母親の方もMy docomoで料金を見せて貰いたかったのだがパスワードがわからないということだったので見られなかった。項目別に比べられなくて残念。

softbank料金3
料金明細では19563パケットで1565円らしい。19563パケットってどれくらいの通信量だろうと思ってSoftbankの換算ページを見てみたら2.4MB。たぶん2段階定額の下限と上限の途中だと思うので単純に割り算じゃダメだろうけど敢えて割ってみると1MBあたりなんと640円。笑っちゃうほど高いっていうか大手キャリアってまだこんなボッタクリやってるんだ、凄いわ。

softbank料金4
「パケットし放題」のパケット量と料金のグラフ。今回の19563パケットはグラフ中の赤い点。最低料金の980円で使えるのは12250パケットまで。12250パケットは約1.5MB。上限は4200円で、上限に到達するのは52500パケット。52500パケットは約6.5MB

docomo料金1
こちらは「がとらぼ」の中の人が使っているdocomoの利用料金。毎月約1000円。

docomo料金2
実はFOMAの通話だけの契約なので先のSoftbankの料金と比べるのはちょっと。

BIGLOBE料金
もう一つ使っているBIGLOBEの料金。先のSoftbankの料金と比べるならこっちかな。通話プランが700円。3GBのデータ通信(エントリープラン)が700円。つまりデータ通信は1MBあたり0.233円。3GB通信しても先のSoftbankのパケット無しより安い。
口座振替・自動払込手数料200円っていうのはクレジットカード払いなら発生しないのかな。てか何でクレカ払いにしなかったんだっけ?

迷惑メールが多いということだったので迷惑メールの設定がされていないか絞りが甘いのが原因でパケットがかさんでいるのではないかと推理してみたが、パケット以外の料金もよくわからないオプションのせいか高過ぎるので父親にはSoftbankをやめさせる方向で相談中。ちょうど今月来月が「ホワイトプランN」の更新月のようだし。
進展があれば続きを書く。

2017年1月16日追記:
自分のことじゃないので敢えて何処に移行したかは書かないけどMNPでMVNOの「1ヶ月3GB 1600円の通話SIM」という無難なコースに移って開通まで完了。電話機は一括払いで購入したのでおそらく通話代を含めても1ヶ月2千円以下で済むと思われる。これで肩の荷が降りたと思ったけど、スマホの使い方を憶えて貰うというとんでもない荷を担いでしまったかも。

Up