PowerShellで少しだけ環境を便利にする

目的

 ・PowerShellの簡単なサンプルを実行することで、簡単に環境を便利にできることを示す

前準備その1

PowerShellをインストールする。

前準備その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の設定から拝借