VBScript: Windowsのシャットダウン、リブート
幾通りか方法がある。
- WMIを使う、成否を取得可能
- Shutdownコマンドを使う
- Xpepmコマンドを使う(XPeのみ)
WMIを使う方法
元ネタは「WMIを使用してスクリプトの幅を広げる(044~050)」から。
Dim ws, w Set ws = GetObject("winmgmts:{(Shutdown)}//./root/cimv2").ExecQuery("Select * from Win32_OperatingSystem where Primary=true") For Each w in ws w.Shutdown() ' w.Reboot()にすれば再起動になる ' 戻値が0なら成功、0以外は失敗 Next
Win32Shutdownを使えば、ログアウト、強制オプションも付けれる、試してないけど。
Win32ShutdownTrackerならタイムアウト設定も可能だが、サポートはVista以降。
Shutdownコマンドを使う
コマンドの詳細は下記が詳しい。
@IT::コマンドラインから電源オフや休止を実行する
Dim ws Set ws = WScript.CreateObject("WScript.Shell") ws.Run "%WINDIR%\system32\shutdown.exe -s -t 00", 0 ' -s を -r にすれば再起動。 ' -t はタイムアウト(秒)
タイムアウトを設定した場合、警告ダイアログが表示される。
-c オプションで、警告ダイアログにメッセージも表示できる。
Xpepmコマンドを使う
Windows Embedded Standard 2009で、Power Managemet Applicationコンポーネントを追加した時のみ使用可能。
XPePM [-Shutdown | -Restart | -Standby | -Hibernate | /?]
シャットダウン、リブート以外に、スタンバイとハイバネートも出来る。
Shutdownコマンドと同様にwscript.shell runを使って呼び出す。
' 成否を返す ' コマンドが無い場合はFalseを返す Function Shutdown() Dim ws Set ws = WScript.CreateObject("WScript.Shell") On Error Resume Next ws.Run "%WINDIR%\system32\xpepm -Shutdown", 0 If Err.Number = 0 Then Shutdown= True Else Shutdown= False End If End Function