SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

リモート コンピュータをシャットダウンする方法

3 comments

リモート コンピュータをシャットダウンする方法として [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]

??????? 引数なし?????????????????????? このメッセージを表示します (-? と同じです)
??????? -i???????????????????????????????? GUI インターフェイスを表示します。このオプションは最初に指定する必要があります
??????? -l???????????????????????????????? ログオフ (-m オプションとは併用できません)
??????? -s??????????????????????????????? コンピュータをシャットダウンします
??????? -r??????????????????????????????? コンピュータをシャットダウンして再起動します
??????? -a??????????????????????????????? システム シャットダウンを中止します
??????? -m コンピュータ名???? シャットダウン/再起動/中止するリモート コンピュータの名前です
??????? -t xx??????????????????????????? シャットダウンのタイムアウトを xx 秒に設定します
??????? -c "コメント"???????????????? シャットダウンのコメントです (127 文字まで)
??????? -f???????????????????????????????? 実行中のアプリケーションを警告なしに閉じます
??????? -d [u][p]:xx:yy???????????? シャットダウンの理由コードです
?????????????????????????????????????????? u = ユーザー コード
?????????????????????????????????????????? p = 計画されたシャットダウンのコード
?????????????????????????????????????????? xx = 重大な理由コード (255 以下の正の整数)
?????????????????????????????????????????? yy = 重大ではない理由コード (65535 以下の正の整数)

[-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 で接続すること前提の設定です。

  1. ファイル名を指定して実行から [gpedit.msc] を実行
  2. [コンピュータの構成] → [管理用テンプレート] → [ネットワーク] → [ネットワーク接続] →
    [Windows ファイアウォール] を開く
    image
  3. ドメイン参加端末の場合は [ドメイン プロファイル] / ワークグループの場合は [標準プロファイル] を開く
  4. [Windows ファイアウォール: リモート管理の例外を許可する] を [有効] に設定
    ?image
  5. [スタート] → [コントロールパネル] → [管理ツール] → [ローカル セキュリティ ポリシー] を開く
  6. [セキュリティの設定] → [ローカル ポリシー] → [セキュリティオプション] を開く
    image
  7. [ネットワーク アクセス: ローカル アカウントの共有とセキュリティ モデル] を
    [クラシック – ローカル ユーザーがローカル ユーザーとして認証する] に設定する。
    image

以上で設定は終了です。

グループポリシー (gpedit.msc) でファイアウォールの例外設定をしない状態では以下のエラーが発生します。

エラー:
説明 = RPC サーバーを利用できません。

?
ローカルセキュリティポリシーを設定しない状態では以下のエラーが発生します。

エラー:
説明 = アクセスが拒否されました。

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 のセキュリティが必要になりそうです。
image image

以下は覚書として WMIC の使用例を。

[リモートコンピュータでコマンドを実行]
WMIC /NODE:"<コンピュータ名>" /USER:"<ユーザー名>" /PASSWORD:"<パスワード>"? PROCESS CALL CREATE "cmd /c dir"

[CSV 形式で出力]
WMIC QFE LIST /FORMAT:csv

[HTML 形式で出力]
WMIC QFE LIST /FORMAT:htable > c:tempqfe.htm

[別コンピュータの情報を取得]
WMIC /NODE:”%COMPUTERNAME%” /NAMESPACE:rootcimv2 PATH Win32_QuickFixEngineering GET Description,FixComments,HotFixID,InstallDate,InstalledOn,ServicePackInEffect /FORMAT:csv

[CALL のヘルプを出力]
WMIC OS CALL /?
または
WMIC /NODE:"%COMPUTERNAME%" /NAMESPACE:rootcimv2 PATH Win32_OperatingSystem CALL /?

[フォーマットの形式を取得]
WMIC OS LIST /FORMAT /?

[リストで取得できる項目を取得]
WMIC OS LIST /?

Share

Written by Masayuki.Ozawa

4月 26th, 2009 at 5:52 am

Posted in ツール

3 Responses to 'リモート コンピュータをシャットダウンする方法'

Subscribe to comments with RSS or TrackBack to 'リモート コンピュータをシャットダウンする方法'.

  1. いつも楽しく拝見しています。
    このWMIからのリモートシャットダウン機能は
    Hyper-Vでも統合サービスの[データ交換]機能で使われていますね。
    シャットダウンのメソッドを実行できるWMIクラスを探していたところだったので、とても感謝しています。

    sophiakunii

    7 2月 11 at 23:31

  2. コメントありがとうございます。
    いつもブログを拝見させていただいております。
    データ交換機能でも使用されているのは知りませんでした。
    情報ありがとうございます!!

    Masayuki.Ozawa

    8 2月 11 at 07:15

  3. […] ここ数日、リモートコンピューターをシャットダウンする方法 投稿に対してのアクセスが多いので今日は VBScript を使用したリモートコンピューターのシャットダウンについて投稿してみたいと思います。 […]

    VBScript でリモートコンピューターをシャットダウン « SE の雑記

    17 3月 11 at 08:06

Leave a Reply