リモート コンピュータをシャットダウンする方法として [shutdown.exe] があります。
Windows NT / Windows 2000 ではリソースキットに含まれています。
ダウンロードできる Windows 2000 のリソースキットには shutdown.exe が含まれていないため、リソースキットの
書籍を持っていない場合は NT のリソースキットのダウンロードモジュールを流用できるようです。
Windows 2000 Resource Kit Tools 管理タスク
Windows NT 4.0 Resource Kit Support Tools
ftp.microsoft.com
Windows XP 以降では標準で shutdown.exe が含まれています。
以下は XP で表示したヘルプになります。
使用法: shutdown.exe [-i | -l | -s | -r | -a] [-f] [-m コンピュータ名] [-t xx] [-c "コメント"] [-d up:xx:yy] ??????? 引数なし?????????????????????? このメッセージを表示します (-? と同じです) |
[-m] オプションを使用するとリモート コンピュータをシャットダウンできるのですがこのコマンドでは資格情報 (ユーザー名) が
指定できないためリモート コンピュータに対してシャットダウンのできる権限を持ったユーザーからコマンドを実行しないと
シャットダウンをすることができません。
WMI であれば資格情報を設定できますので [WMIC] コマンドを使用するとリモート コンピュータを資格情報を設定して
シャットダウンすることができます。
以下のようなコマンドで実行可能です。
# 改行されていますが一行で入力します。
WMIC /NODE:"<コンピュータ名>" /USER:"<ユーザー名>" /PASSWORD:"<パスワード>" OS WHERE Primary=1 CALL Win32Shutdown 5 または WMIC /NODE:"<コンピュータ名>" /USER:"<ユーザー名>" /PASSWORD:"<パスワード>" OS WHERE Primary=1 CALL Shutdown |
再起動の場合は以下のコマンドで
WMIC /NODE:"<コンピュータ名>" /USER:"<ユーザー名>" /PASSWORD:"<パスワード>" OS WHERE Primary=1 CALL Win32Shutdown 6 または WMIC /NODE:"<コンピュータ名>" /USER:"<ユーザー名>" /PASSWORD:"<パスワード>" OS WHERE Primary=1 CALL Reboot |
?
# Shutdown / Reboot だと強制終了 / 強制再起動はできなさそうです。
これでリモート コンピュータのシャットダウン / 再起動を資格情報を指定して実行できます。
これでドメイン環境でなくてもリモート コンピュータを操作できます。
ただし、XP に対して実行したい場合は以下の KB の情報にあるように XP の設定を変更する必要があります。
# XP の SP 2 でセキュリティ強化されたことにより設定を明示的にする必要があります。
Windows XP SP2 の WMI に関する問題のトラブルシューティング方法
<http://support.microsoft.com/kb/875605/ja>
最小限の設定だけであれば以下の設定で大丈夫だと思います。
# Administrator で接続すること前提の設定です。
- ファイル名を指定して実行から [gpedit.msc] を実行
- [コンピュータの構成] → [管理用テンプレート] → [ネットワーク] → [ネットワーク接続] →
[Windows ファイアウォール] を開く
- ドメイン参加端末の場合は [ドメイン プロファイル] / ワークグループの場合は [標準プロファイル] を開く
- [Windows ファイアウォール: リモート管理の例外を許可する] を [有効] に設定
? - [スタート] → [コントロールパネル] → [管理ツール] → [ローカル セキュリティ ポリシー] を開く
- [セキュリティの設定] → [ローカル ポリシー] → [セキュリティオプション] を開く
- [ネットワーク アクセス: ローカル アカウントの共有とセキュリティ モデル] を
[クラシック – ローカル ユーザーがローカル ユーザーとして認証する] に設定する。
以上で設定は終了です。
グループポリシー (gpedit.msc) でファイアウォールの例外設定をしない状態では以下のエラーが発生します。
エラー: |
?
ローカルセキュリティポリシーを設定しない状態では以下のエラーが発生します。
エラー: |
Win32Shutdown の引数の値は以下の URL に記載されています。
Win32Shutdown Method of the Win32_OperatingSystem Class
Value | Meaning |
0 (0x0) | Log Off |
4 (0x4) | Forced Log Off (0 + 4) |
1 (0x1) | Shutdown |
5 (0x5) | Forced Shutdown (1 + 4) |
2 (0x2) | Reboot |
6 (0x6) | Forced Reboot (2 + 4) |
8 (0x8) | Power Off |
12 (0xC) | Forced Power Off (8 + 4) |
?
Administrator 以外で接続する場合には COM のセキュリティ設定や WMI のセキュリティが必要になりそうです。
以下は覚書として WMIC の使用例を。
[リモートコンピュータでコマンドを実行] [CSV 形式で出力] [HTML 形式で出力] [別コンピュータの情報を取得] [CALL のヘルプを出力] [フォーマットの形式を取得] [リストで取得できる項目を取得] |
いつも楽しく拝見しています。
このWMIからのリモートシャットダウン機能は
Hyper-Vでも統合サービスの[データ交換]機能で使われていますね。
シャットダウンのメソッドを実行できるWMIクラスを探していたところだったので、とても感謝しています。
sophiakunii
7 2月 11 at 23:31
コメントありがとうございます。
いつもブログを拝見させていただいております。
データ交換機能でも使用されているのは知りませんでした。
情報ありがとうございます!!
Masayuki.Ozawa
8 2月 11 at 07:15
[…] ここ数日、リモートコンピューターをシャットダウンする方法 投稿に対してのアクセスが多いので今日は VBScript を使用したリモートコンピューターのシャットダウンについて投稿してみたいと思います。 […]
VBScript でリモートコンピューターをシャットダウン « SE の雑記
17 3月 11 at 08:06