powershell : タスクスケジューラでpowershellを直接CALLすると青い画面が出る問題
powershell : 決まった時間にシャットダウンするタスク(1回だけ) - 亀の甲羅2
で書いた通り、タスクスケジューラからpowershellを(直接)CALLすることができた。でも、青い画面が一瞬見える。それがウザい。
Powershell コラム:タスクスケジューラによるPowerShellの実行 | NTTデータ先端技術株式会社
天下のNTTDATA様が「特に何も考えずにタスクスケジューラでPowerShellを実行しようとすると、一瞬ウィンドウが表示されてしまいます。」と書かれている通りです。
やはりVBScript挟まなければならんか。
- タスクスケジューラ(タスク)→ VBScript → powershell(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