PowerShellで少しだけ環境を便利にする
目的
・PowerShellの簡単なサンプルを実行することで、簡単に環境を便利にできることを示す
前準備その1
PowerShellをインストールする。
- Windows7:デフォルトで入っているので、作業なし
- Windows Vista
- X86:http://bit.ly/1iLRFIからダウンロードしてインストール
- X64:http://bit.ly/gR8ugfからダウンロードしてインストール
- Windows XP:http://bit.ly/fIzP0nからダウンロードしてインストール
前準備その2
PowerShellを実行できるように設定する。
PowerShellは、セキュリティの関係上、そのままでは実行できない。そこで、実行できるように以下の手順を実施する。
- 「Winキー + R」を押す
- 「ファイル名を指定して実行」で「powershell」と入力してEnter
- コマンドラインが起動するので、「Set-ExecutionPolicy RemoteSigned」と入力してEnter
これで、PowerShellのスクリプトが実行できるようになる。
前準備その3
ckw(使いやすいコマンドライン環境)をインストールする。
PowerShellは、Windowsのシェル(コマンドライン)上で実行する。しかし、Windows標準のコマンドラインは、
- 最大化がおかしい
- コピーが矩形
- 何より日本語入力がめんどくさい(Alt + 半角/全角)
と、欠点がたくさんあって、使いづらい。そこで、標準コマンドラインの代わりに「ckw」というのを利用する。
→https://github.com/deflis/ckw-mod/downloads
上記URLの最新版をダウンロードし、ZIPを解凍すると「ckw.exe」というのがある。これを実行するだけ。
すると、標準コマンドラインそっくりの画面が立ち上がる。しかし、これは、
- 最大化が自然
- コピーも普通のエディタ通り
- 日本語入力が簡単(半角/全角)
と、標準コマンドラインの欠点をカバーしており、格段に使いやすい。このため、今後はckwでPowerShellを実行するようにしていく。
- ckw.exe実行後の画面で、「powershell」と入力して実行すればよい。
- また、ckw.exe実行時に「-e powershell」とオプションを指定することで、ckw実行時にPowerShellも起動するようになる。
起動スクリプトの作成
PowerShellでは、Unix環境の「なんとかrc」のように、起動時(or ログイン時)に実行されるスクリプトを作成できる。このスクリプトに普段使用するコマンドを登録しておくと便利だ。
PowerShellを起動し、以下のようにして、起動スクリプトを作成する。
PS C:\> cd $pshome PS C:\Windows\SysWOW64\WindowsPowerShell\v1.0> notepad profile.ps1
※「>」より後の部分を入力してね。
profile.ps1では、例えば以下のコードを記述する。*1
Set-Alias firefox 'C:\Program Files (x86)\Mozilla Firefox\firefox.exe' # google function ggl($keyword) { $baseUrl = "http://www.google.co.jp/search?q=$keyword&ie=utf-8&oe=utf-8&aq=t&hl=ja" browseUrl($baseUrl) } # yahoo function yho($keyword) { $baseUrl = "http://search.yahoo.co.jp/search?ei=UTF-8&fr=crmas&p=$keyword" browseUrl($baseUrl) } # wikipedia function wpd($keyword) { $baseUrl = "http://ja.wikipedia.org/wiki/Special:Search?search=$keyword" browseUrl($baseUrl) } function browseUrl($baseUrl) { firefox -new-tab $baseUrl }
上記コードを保存後、powershellを再起動すると、上記コード中で定義したfunctionを実行できるようになる。
例えば、
- 「ggl <検索ワード>」 で、firefox起動 + googleによる検索ワードの検索結果を表示
- 「yho <検索ワード>」 で、firefox起動 + yahooによる検索ワードの検索結果を表示
- 「wpd <検索ワード>」 で、firefox起動 + wikipediaによる検索ワードの検索結果を表示
というように、functionで定義した関数を、powershell上で新規コマンドとして実行できるようになる。(ckwを使用すると<検索ワード>の部分にストレスなく日本語を入力できる)
なお、上記はあくまで一例で、引数で指定した検索ワードを、そのままリクエストURL中のリクエストパラメータに割り当てて実行しているだけなので、同じ仕組みであれば、他のサイトにも簡単に適用できる。
また、僕は普段firefoxを使用しているので、例はfirefoxだけど、IEやchromeもURLを引数にして実行できるはずなので、同じように定義すれば実現可能。
最後に
実は、先に示した例は、Windows標準のコマンドライン環境でも実現可能です。
しかし、PowerShellは以下の点で優れています。
- 配列/ハッシュなどのデータ構造を標準でサポート
- if/foreachなどの制御構文も標準でサポート
- 例外処理機構(try-catch-finally)も標準でサポート
- WMIオブジェクトを扱える
- COMオブジェクトを扱える(excelやword等も操作できる)
- .NET Frameworkオブジェクトも扱える
- 後方互換性も完備(mkdir/cacls等の旧コマンドはそのまま使える)
WMIやCOMや.NETオブジェクトなど必要ない!という人でも、配列/ハッシュのデータ構造を使用し、foreach等を駆使してmkdirやcacls等のコマンドを繰り返しで実行できるので、これだけでも相当メリットがあるでしょう。
今回示したコードはあくまで一例です。
あとは、任意に自動化シナリオを考え、コードに落とすことでより環境は便利になるでしょう。
*1:リクエストパラメータを含むurlはgoogle chromeの設定から拝借