【JP1】.ps1のジョブを実行できない・・・

【JP1】.ps1のジョブを実行できない・・・

皆様、こんばんは。GWいかがおすごしでしょうか。
今回は珍しく職業がらみの覚書を残しておこうと思います。
H社製のジョブ管理ソフトJP1。こやつでジョブをキックする際に躓いた方は少なからずやいるはず・・・。そんな方々の一助となればと思います。

事象

.ps1のジョブを実行する際に以下のエラーが発生する。(JP1の管理画面でも同じ内容のエラーが表示される)


対応

私が対応した大まかな流れとしては以下。

1.ジョブの処理結果が「実行中」のままで終わらない。

原因:.ps1ファイルを実行する関連付けプログラムがメモ帳になっていた。
対処:関連付けをPowerShell.exeに変更する。

2.ジョブの処理結果が「異常終了」
原因:ExecutionPolicyの定義が足らなかった。
対処:32bit/64bitどちらのPowerShellにも実行ポリシーを定義する。

1.の対応
そもそも、ExecutionPolicyのエラーが出る前に.ps1がメモ帳で実行されており、タスクマネージャーでプロセスを確認すると、notepad.exeで実行されていたのですが、それに気づかなかったのはナイショです。思い当たる方は、まずここから見直しましょう。

.ps1ファイルの関連付けプログラムの確認
コマンドプロンプトから以下のコマンドで設定状態を確認
※コマンドプロンプトは管理者権限で実行する必要あり

#.ps1に紐づくファイル・タイプを表示する
 assoc .ps1 
結果:.ps1=Microsoft.PowerShellScript.1

#「 Microsoft.PowerShellScript.1 」が何で実行されているかを確認
 ftype Microsoft.PowerShellScript.1  
結果:Microsoft.PowerShellScript.1=”C:\Windows\System32\notepad.exe” “%1”

上記の結果になっている場合は.ps1がメモ帳で実行されているのでPowerShellへの変更が必要です。

#.ps1を実行するプログラムをPowerShellに変更
 ftype Microsoft.PowerShellScript.1=”C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe” “%%1%  

2.の対応
実行プログラムの紐付けをPowerShellに変更し、.ps1のテストジョブをローカルで実行するとOK。しかし、JP1を介してキックするとExecutionPolicyエラーが発生・・・。構成としてはAD環境で運用管理サーバからジョブ実行サーバにある.ps1スクリプトを直接指定して実行する構成。

なお、各サーバのExecutionPolicyは構築時に「 Unrestricted 」にしている。
状況としては、ジョブ実行サーバのローカルでのスクリプト実行は問題なし。運用管理サーバからジョブ実行サーバにある.ps1ファイルを直指定するとエラーが出る。しかし、ジョブをキックする際に明示的にポリシーを指定すると処理に成功するといった具合。
※ポリシーの設定値の詳細はググったら出てくるのでご確認ください。

対応した内容としては以下のとおり。

ローカルユーザの権限確認
実行ユーザのひとつがAdministratorsグループから外れていたので追加。
ジョブ実行用のグループ等Administratorsに該当するグループがある場合は参加ユーザに漏れがないかを確認する。

PowerShell(bit違い)のExecutionPolicyの設定
そして問題はココ。前述のとおり、マシンには設定を行っていたつもりだったのですが、PowerShell.exeのbit違いで設定までは頭にありませんでした。(毎回64bit版だけでテストしていた)なお、1.の対応の中でPowerShellの関連付けプログラムは64bit版(System32)を指定しておりますが、32bit版(SysWow64)の方も試して結果が同じだったため見落とすこととなりました。お気をつけください。それでは肝心の設定ですが以下のとおりです。

#ExecutionPolicyの設定
コマンドプロンプトから以下のコマンドで設定状態を確認
※コマンドプロンプトは管理者権限で実行する必要あり
#64bit設定
 C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe 
 set-ExecutionPolicy Unrestricted  
 exit 
#32bit設定
 C:\Windows\SysWow64\WindowsPowerShell\v1.0\powershell.exe 
 set-ExecutionPolicy Unrestricted  
 exit 

「Unrestricted」の部分については「RemoteSigned」以上のポリシーであれば大丈夫だと思うので、環境に合わせて設定してください。

私の環境ではこれで実行できたのですが、AD環境である場合、グループポリシー等の別要因が原因の可能性もありますので、ひとまず参考にしていただけたらと思います。

それでは、今日はこの辺で!