こんにちは、武田です。
今回はwindows用のCUI「PowerShell」を触ってみます。

どんなもの?

  • 標準のコマンドプロンプトより強力
  • バッチもスゴイ
  • cron的な事もできるらしい

発端

先日、windows上でVirtualBox+Vagrant+CentOSの仮想環境の構築を行ってました。
普段触っていないwindowsのコマンドラインを使ったのですがこんな形に苦しめられておりました。

コマンドライン立ち上げて。。。ここはどこかな?

C:\>pwd
'pwd' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
※windowsだと[dir]

ああ、コマンド違うのか。。。
GUIからPATHはわかるから打ち込むか。移動するぞ!

C:\>cd C:\hoge
C:\hoge>

お、ちゃんと移動したぞ!
次はカレントのファイルを確認しよう

C:\hoge>ls
'ls' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
※windowsだと[dir]

dirコマンドなのか。。。
Vagrantfileをいじるから一応バックアップとっておこう

C:\hoge>cp Vagrantfile Vagrantfile.backup
'cp' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
※win(ry

こけてばっかで全然進まねーじゃねーか!

なまじLinuxに慣れているせいか余計にハマってしまうようです。。。
だったらより良い環境に変えていけばいいじゃない!

そこで”PowerShell”の出番!

なんとPowerShellはwindows7から標準搭載なんです

まずは起動 winキー、検索ボックスに[PowerShell]と。。。
ps
青いコマンドプロンプトだなこれ。。。

ではさっそく新型の力を試して見ましょう

7PS C:\hoge> pwd
Path
----
C:\hoge
PS C:\hoge> cd C:\hoge
PS C:\hoge> ls

    ディレクトリ: C:\hoge

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2016/03/08     18:09          4 hoge.txt
PS C:\hoge> cp .\hoge.txt .\hoge.txt.backup
PS C:\hoge> ls
    ディレクトリ: C:\hoge
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2016/03/08     18:09          4 hoge.txt
-a---        2016/03/08     18:09          4 hoge.txt.backup

さっきできなかった[pwd cd ls cp]がこうもあっさりと!
本来はPowerShell用コマンドレットなるものらしいのですが
linuxユーザに配慮してあってエイリアスが貼ってあるようです。

せっかくだから他のlinuxコマンドも使えるかちょっとやってみましょう

PS C:\hoge> cat .\hoge.txt
ここは本文
ここは本文ここは本文
ここは本文ここは本文ここは本文

日本語も問題なく表示

PS C:\hoge> curl http://www.adjust.ne.jp/
StatusCode        : 200
StatusDescription : OK
Content           : <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xh
                    ml1-transitional.dtd">
                    <html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja" xmlns:og="h...
(以下略)

おお弊社のサイトへもアクセスできる!

PS C:\hoge> diff .\hoge.txt .\hoge_2.txt
InputObject                                                 SideIndicator
-----------                                                 -------------
.\hoge_2.txt                                                =>
.\hoge.txt                                                  <=

diffはなんか意味不明ですね。。。

PS C:\hoge> man cp

名前
    Copy-Item

構文
    Copy-Item [-Path] <string[]> [[-Destination] <string>] [-Container] [-Force] [-Filter <string>] [-Include <string[]
    >] [-Exclude <string[]>] [-Recurse] [-PassThru] [-Credential <pscredential>] [-WhatIf] [-Confirm] [-UseTransaction]
      [<CommonParameters>]

    Copy-Item [[-Destination] <string>] -LiteralPath <string[]> [-Container] [-Force] [-Filter <string>] [-Include <str
    ing[]>] [-Exclude <string[]>] [-Recurse] [-PassThru] [-Credential <pscredential>] [-WhatIf] [-Confirm] [-UseTransac
    tion]  [<CommonParameters>]


エイリアス
    cpi
    cp
    copy
注釈
    Get-Help を実行しましたが、このコンピューターにこのコマンドレットのヘルプ ファイルは見つかりませんでした。ヘルプの一
部だけが表示されています。
        -- このコマンドレットを含むモジュールのヘルプ ファイルをダウンロードしてインストールするには、Update-Help を使用
してください。
        -- このコマンドレットのヘルプ トピックをオンラインで確認するには、「Get-Help Copy-Item -Online」と入力するか、
           http://go.microsoft.com/fwlink/?LinkID=113292 を参照してください。

manコマンドまであんの!?

PS C:\hoge> history

  Id CommandLine
  -- -----------
   1 cd
   2 pwd
   3 pwd
   4 ls
   5 pwd

困ったときのhistory

PS C:\hoge> rm .\hoge_2.txt
PS C:\hoge> ls

    ディレクトリ: C:\hoge
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2016/04/09     14:17         64 hoge.txt
-a---        2016/03/08     18:09          4 hoge.txt.backup

ファイルの削除


# パイプの利用 PS C:\hoge> history | Select-String "curl" curl http://www.adjust.ne.jp/ curl http://www.adjust.ne.jp/

処理結果をパイプで渡してgrepもできます。
前のコマンド思い出せない時なんかによくやりますね。

エイリアスの追加

私は三度の飯よりgrep 好きなのでSelect-Stringだとやりづらいですね
これはエイリアス追加しましょう

Set-Alias grep Select-String
history | grep "curl"

curl http://www.adjust.ne.jp/
curl http://www.adjust.ne.jp/

あっさり完成。使い慣れてる書き方で実に気分がいい!

次回

正直、舐めてました[PowerShell]windowsのCUIなんざオマケみたいなもの
pingうって情報強者ぶるための小道具とか思っててすみませんでした。

ちょっと業務で使えそうな事や簡単なアプリケーション作っていきます。

参考資料