2008年09月26日

PowerShell の起動を高速化する

以下のブログ記事、

PowerShell from Japan!! - PowerShellの起動を速くする
炎の作品 ― flamework.net ― » PowerShell の起動を高速化する

を参考にして高速化してみる。

PowerShell の起動がなぜ遅いかというと、.Net であるがゆえに OS に合わせていちいちコンパイルしているせいなのだとか。でも起動の度に OS が違うことなど有り得ないのでそれをコンパイル済みにキャッシュしておけばいいというのが次のスクリプトの趣旨だそうです。、

テキストエディタに、次のリストをコピーして貼り付ける。

Set-Alias ngen @(
dir (join-path ${env:\windir} "Microsoft.NET\Framework") ngen.exe -recurse |
sort -descending lastwritetime
)[0].fullName
[appdomain]::currentdomain.getassemblies() | %{ngen $_.location}


適当に「Speedup.ps1」などとして保存。PowerShell のスクリプトは拡張子「ps1」にするらしい。

保存したファイルを自分のユーザーフォルダ(Documentsの上)に保存。PowerShell のデフォルトのカレントディレクトリだからというだけ。

PowerShell 上で、「./Speedup.ps1」と実行してみる。

……なんか怒られた。

セキュリティを変更しなければならないらしい。

PowerShellスクリプトの実行セキュリティ・ポリシーを変更する − @IT

を参考に変更してみる。

Get-ExecutionPolicy


と入力すると、

Restricted


と返事。確かに、「すべてのスクリプトが実行禁止。PowerShellインストール直後のデフォルト設定」という状態だった。

じゃあローカルに保存されているものだけ実行可能な RemoteSigned に変えてみる。

Set-ExecutionPolicy RemoteSigned


ぐおー。「アクセスが拒否されました」だって。

PowerShellセキュリティ変更

記事をよく読むと、

なおWindows Vistaの場合はUACによってSet-ExecutionPolicyの実行が拒否されるので、[管理者として実行]で[Windows PowerShell]を起動してから実行していただきたい。


って書いてあった。一度 PowerShell を終了。もう一度スタートメニューから右クリックで「管理者として実行」をクリック。画面が暗くなって許可を求めるので許可をすると起動する。もう一度先ほどの「Set-ExecutionPolicy RemoteSigned」コマンドを実行する。

……だまって終了。変わったのかな?

PowerShellセキュリティ変更02

ま、いいや。Speedup.ps1 を実行してみる。

./Speedup.ps1


おおっと、こんどはコンパイル画面が流れていく。

PowerShell起動高速化コンパイル

終了。これで起動は早くなったはず。一度閉じてから、再び PowerShell を起動してみる。うん、確かに早くなった。まぁ余り頻繁にシェル画面を閉じるのでなければ問題にならない訳ですが、こんなことをやっているうちに、PowerShell というものが分かってくるということで。
posted by n_shimizu at 18:45| Comment(0) | TrackBack(0) | PowerShell
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/20067591
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック