俺のメモ帖

とあるインフラ系SEのメモ帖。趣味や技術的なもとか書けたらいいなぁ。

【PowerShell】PowerShellのスクリプトの実行について(Set-ExecutionPolicy)少しだけ嵌ったこと

PowerShellって、デフォルトだとスクリプトの実行が禁止されている。

そんなときに使うのが、「Set-ExecutionPolicy」ですよね。

Set-ExecutionPolicy RemoteSigned

 

で、このままの状態で開発を進めて、手動でスクリプト動かして単体テストも完了。

じゃあ、いざジョブスケジューラにジョブと登録して、ジョブとして実行・・・

あれ、動かない?

 

原因を調べたところ、思わぬところに原因がありました。

それは32bit環境と64bit環境の両方でそれぞれ「Set-ExecutionPolicy」しなければいけないということ。

というのは、使用した某N○I社製のジョブスケジューラは、基本的に32bit環境でジョブを実行する。

普通(Windows2008R2以降のサーバOSの場合)、スタートメニューやコマンドプロンプトとかから、「PowerShell.exe」で起動した場合は、64bit環境で起動され、それで不都合が発生しなければそのまま64bitしか使わないと思います。

なので、普通にPowerShell起動して、「Set-ExecutionPolicy」して終わりです。

でも、実はこれだと64bit環境にはポリシーが設定されても、32bit環境にはポリシーは設定されません。

つまりは、32bit環境ではスクリプトの実行は禁止されたまま。

なので、スタートメニューから、PowerShellの32bit環境を起動してやり、そちらの窓でも「Set-ExecutionPolicy」を実行しなければいけなかったのです。

 

そのジョブスケジューラ、最新版でも未だに動作環境32bitのままなのかな・・・?

Windows Server 2008 R2以降、サーバOSは32bit版は既に存在してない。

かつ、32bit版が存在するWindows Server 2008はサポートが2020年1月14日で終了してしまうというのに・・・。

 

 

実はこのデフォルト実行環境が32bitっていうジョブスケジューラでジョブを実行するにあたって、実行環境が32bitっていうところが結構いやらしくて、じゃあPowershell32版の実行ポリシーRemoteSignedに変更すれば万事おっけーって感じでもなくて、そのPowershellスクリプトでは、Share Point Server 2010関連の処理を実行してて、SharePoint Server2010は32bit版というのが存在してなくて結局32bit動作環境ではSharePoint関連のコマンドレット動かなくて、もう一工夫必要だったりと時代遅れ感満載のジョブスケジューラでした。

作ったシステムリプレースもうすぐらしいけど、担当者がんばってください。