推定無題

日々調べたこととか

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