.NET Framework 2.0のインストール後、Monadをインストールして遊んでた。
先日コマンドラインで試してたときは何の問題も無かったのに、今日ファイルにスクリプトを書いて実行してみたところで問題発生。
・ファイルが認識されない
MSH F:\Temp\msh> test.msh
'test.msh' is not recognized as a Cmdlet, function, operable program, or script file.
At line:1 char:8
+ test.msh <<<<
調べてみたら、これはUnix系OSのようにカレントディレクトリが認識されてなくて、PATH環境変数で指定されたパスだけをサーチしているとのこと。なるなる、てことで test.msh じゃなく ./test.msh と指定したら(./testや.\test等でもOK)次の段階に進めた。試してないけど、PATH環境変数にカレントディレクトリを追加したら ./ も不要になると思う。
Seanbananablog - Monad Problems
で、一つクリアしたところでまた一苦労w
・権限がない
MSH F:\Temp\msh> ./test.msh
The file F:\Temp\msh\test.msh cannot be loaded.
The execution of scripts is disabled on your system.
Please see "get-help about_signing" for more details.
At line:1 char:7
+ ./test.msh <<<<
get-help コマンドを使って about_signing ドキュメント見ろと言うから実行してみても、そんなドキュメント無いって怒られちゃう ><
さすがベータバージョンw
仕方なくgoogleで探し回ってやっと見つけた。
CodeSigning in "Monad" Shell Beta 2 (for .NET Framework 2.0 RC/RTM)
get-help about_signing (上記サイトからのリンク)
ざっと読んでみた感じ、"for .NET Framework 2.0 RC/RTM" バージョンは、Monadインストール時のセキュリティ初期値が一番強い値(Restricted; インタラクティブ実行のみでスクリプトファイルの実行が許可されない)に変更されてるっぽい(以前のバージョンがどんな設定でインストールしてたのかは知らないけどw)。
てことで、設定変更するにはレジストリエディタを使うか、Monad自体にもレジストリ変更のコマンドがあるからそっちを使うか、何れにせよレジストリの設定値を変更する必要があった。
キー:
\HKLM\SOFTWARE\Microsoft\Msh\Microsoft.Management.Automation.msh
値:
Restricted
AllSigned
RemoteSigned
Unrestricted
まだ署名の仕方は調べてないから、取り敢えず今すぐスクリプトファイルを実行できそうな設定のうち一番安全と思われる "RemoteSigned" にしてみた。で、やっと実行完了^^
めでたしめでたし。眠いから寝るwww
(2006.03.23 追記)
Web ChangeLog - MSH: Signing
こちらの説明がとても分かりやすいです。ありがたや :)
(2006.09.27 追記)
Windows PowerShell RC1では
Set-ExecutionPolicy RemoteSigned
のように書いてコマンドラインで指定できるようです。