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関連のコマンドレット動かなくて、もう一工夫必要だったりと時代遅れ感満載のジョブスケジューラでした。
作ったシステムリプレースもうすぐらしいけど、担当者がんばってください。