ここ数日、リモートコンピューターをシャットダウンする方法 投稿に対してのアクセスが多いので今日は VBScript を使用したリモートコンピューターのシャットダウンについて投稿してみたいと思います。
■VBScript でリモートコンピュータをシャットダウン
Windows スクリプトセミナー WMI編 VBScript&WMI
【Management】UACの WMIへの影響について
に詳しく書かれているので実はそれほど書くことが無かったりするのですが…。
他にもいろいろな方が書かれていますので [Win32_OperatingSystem] [Win32Shutdown] で検索をしていただくと情報はかなり見つかるかと思います。
VBScript でリモートシャットダウンを実行する場合には以下のようなスクリプトを使用します。
Option Explicit If WScript.Arguments.Count <> 4 Then Set Locator1 = WScript.CreateObject("WbemScripting.SWbemLocator") Set Service = Locator.ConnectServer(strServer, "rootcimv2", strUser,strPassword) For Each colOS In objOS WScript.Echo "Return Value : " & iRet Set Locator = Nothing |
このスクリプトを以下の形式で実行するとリモートコンピューターを VBScript でシャットダウンすることが可能です。
要求が受けつけられた場合、Return Value は 0 となっているはずですので成功可否に関してはこの辺の値を使用して判断することができるかと思います。
# すでに要求が送信済みの場合は 1115 だったと思います。
以下の例ではモードを [Reboot] (2) にしていますので再起動が実施されます。
cscript RemoteShutdown.vbs コンピューター名 "ユーザー名" "パスワード" モード
例) |
Windows Server 2008 以降 (または Vista 以降) は UAC の関係で、ワークグループ環境では対象コンピューターのローカルのビルトイン Administrator を使用しないとアクセス拒否となってしまいシャットダウンができない可能性がありますのでご注意いただければと思います。
この辺の情報が参考になると思うのですがあまり読めていません…。
# Microsoft の安納さんのブログに書かれている内容がこの情報の邦訳になるかと。
User Account Control and WMI
コンピューターがロックされている場合、サーバー上で何かしらのプログラムが実行されており要求の応答待ちになってしまている場合等は、Forcexxxx 系を使用する必要があるかもしれませんので事前にテストをする必要はあります。
# UPS の通電による自動起動を設定している場合は、Shutdown と PowerOff のどちらが適切かテストしておく必要があるかもしれません。私、この辺は疎いので詳しいことが書けないのですが。
ここ数日、輪番電停電対応でシャットダウンについての投稿の参照が多かったのかと思いますが、WMIC 以外でも実施することが可能ですので何かのご参考になればと思い投稿をしておきました。
# 停電対応をされている方は本当にお疲れ様です。
以前投稿をしました、複数のサーバーに Ping を送信するサンプルスクリプト と組み合わせるとシャットダウン要求送信後にネットワークレベルで疎通確認ができるかと思いますので必要に応じてこちらもご利用いただければと。