Powershell(Powershellのmode変更_windows S mode解除)
■Powershellでクラスを使用したいのでmodeを少し調べた
最近、Powershellの本を読むことがあり、オブジェクト指向スクリプト言語とあった。オブジェクト指向であれば、クラスやメソッドを使用して、前回のオセロのプログラムをきれいにできると思うけど、ConstrainedLanguage modeでは、クラスの実行時にエラーが出ていた。
何とかしてConstrainedLanguage modeを変更できないか、管理者で実行など試してみたけど、Powershellを起動したときからすでにConstrainedLanguage modeとなる。また、変更のコマンドを入力しても、InvalidOperationとプロパティを設定できないといったエラーが出る(下図)。
ネットで記事をあさってみると、Powershellは、UMCI(User Mode Code Integrity)ポリシーが有効となっていることを自動的に検知して、ConstrainedLanguage modeでのみ動く、というMicrosoftの記事があった。セキュリティの関係で思い当たるのは、Windows S modeとなっていることくらいなので、その解除をしてみた。解除は、Microsoft Storeから「Sモードをオフにする」を入手するだけ。特に設定画面が出ることもなくすぐに解除された。
解除後にPowershellを起動し、modeを確認してみるとFullLanguageモードとなっていた。
上で実行したsample003.ps1を実行してみると、エラーが出ることなく起動した。その後、ConstrainedLanguage modeに変更して実行すると、エラーが出た(コードは変更していないと思うけど、エラー内容はWindows S modeのConstrainedLanguage modeとは違うものが出た)。
いずれにせよ、これでクラスを使ったコードを試すことができる。
次回からオセロのコードをオブジェクト指向に修正する。