亀の甲羅2

今日もまた朝とく起きて励まなん窓に明るきありあけの月

powershell : タスクスケジューラでpowershellを直接CALLすると青い画面が出る問題

powershell : 決まった時間にシャットダウンするタスク(1回だけ) - 亀の甲羅2

で書いた通り、タスクスケジューラからpowershellを(直接)CALLすることができた。でも、青い画面が一瞬見える。それがウザい。

Powershell コラム:タスクスケジューラによるPowerShellの実行 | NTTデータ先端技術株式会社
天下のNTTDATA様が「特に何も考えずにタスクスケジューラでPowerShellを実行しようとすると、一瞬ウィンドウが表示されてしまいます。」と書かれている通りです。

やはりVBScript挟まなければならんか。

  • タスクスケジューラ(タスク)→ VBScriptpowershell(script)→ 結果

1. VBScriptを用意する

' filename : hogehoge.vbs

Option Explicit
 
' とりあえず何が起こっても次に進もうぜ!
On Error Resume Next

Dim objShell
Dim exitcode

Const PS1File = "C:\temp\hogehoge.ps1" 
’ 心配なのでフルパスで記載した

Set objShell = CreateObject("Wscript.Shell")
 
If Err.Number = 0 Then
    exitcode = objShell.run ("PowerShell.exe -WindowStyle Hidden -ExecutionPolicy RemoteSigned -File """ & PS1File & """ ",0,True)
    ' おまじないで「-WindowStyle Hidden」のオプションも付けた(あまり意味がない)
End If
 

set objShell = Nothing

Wscript.Quit(exitcode)

NTTDataさんも書かれているが、VBScriptエンコードに注意が必要である。基本、日本語は使わない方が良い。(今回はUTF-8でやってみたが問題なし)

2. タスクスケジューラの設定

細かいことは、NTTDataさんのXMLをタスクスケジューラにインポートすればいいけど、
概ね、下記画像の所がキモである。細かい設定は要件により異なるので省略する。


バージョン情報

PS > $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.19041.2364

参考