ablog

不器用で落着きのない技術者のメモ

Windows でリモートホストのプログラムを実行する方法

Windows XP マシンから別の Windows XP マシンのプログラムを手軽に実行したかったので、いろいろ調べてたら、
CX's MEMO でナイスな vbscript を発見!
何かをインストールしたりする必要ないので、とてもお手軽。

  • xstart.vbs
Set args = Wscript.Arguments
If args.Count < 1 Then
    Wscript.StdOut.WriteLine "xstart <command> [<computer>]"
Else
    '--- コマンド指定
    strCommand = args(0)
    '--- コンピュータ指定
    strComputerPath = ""
    If args.Count = 2 Then
        strComputer = args(1)
        If InStr(strComputer, "\\") = 1 Then
            strComputer = Mid(strComputer, 3)
        End If
        strComputerPath = "\\" & strComputer & "\root\cimv2:"
    End If
    '--- WMI に接続 Wim32_Process クラスを取り出す
    Set clsProcess = GetObject("winmgmts:{impersonationLevel=impersonate}" _
        & "!" & strComputerPath & "Win32_Process")
   '--- プロセスの作成
    lngResult = clsProcess.Create(strCommand)
    Wscript.StdOut.WriteLine strCommand & " :" & lngResult
End If
  • 実行してみる
    • host01 から host02 の notepad を実行する。
> hostname
host01
>cscript //Nologo xstart.vbs notepad.exe host02
notepad.exe :0
    • host02 の[Windows タスクマネージャ]>[プロセス]を確認すると、notepad.exe が起動している


追記(2009/08/31):

>cscript //Nologo xstart.vbs notepad.exe host1
notepad.exe :0

>cscript //Nologo xstart.vbs notepad.exe host1
notepad.exe :0

>cscript //Nologo xstart.vbs notepad.exe host1
notepad.exe :0

>cscript //Nologo xstart.vbs notepad.exe host1
notepad.exe :8

何度も同じプログラムを実行するとエラーになる。
戻り値 8 はなんだ?

コマンドの実行結果ではなく、単純にプロセスを生成できたかどうかの結果を表す
・ 0:プロセスの生成に成功
(以下、プロセスの生成に失敗)
・ 2:アクセスが拒否された
・ 3:コマンド実行権限が不足している
・ 8:不明なエラー
・ 9:コマンドのパスが見つからない
・21:指定したパラメータが誤っている

マニアックなプログラミング備忘録

不明なエラー。。。
ログとか取れないのかな。
http://blogs.technet.com/jpilmblg/archive/2009/06/11/wmi-troubleshoot-1-wmi-xp-2003-vista-2008.aspx

  • [スタート]-[ファイル名を指定して実行(R)..]で、「wmimgmt.msc」と入力して[OK]をクリックする。
  • [操作]-[プロパティ]-[ログの収集]-[ログレベル]で、[詳細]を選択して[OK]をクリックする。
  • ログの出力先は [操作]-[プロパティ]-[ログの収集]-[ログ ファイルの属性]-[場所] で確認することができる。

詳細なログを取得するよう設定したので、再度エラーを発生させる。

>cscript //Nologo xstart.vbs notepad.exe host1
notepad.exe :0
...
>cscript //Nologo xstart.vbs notepad.exe host1
notepad.exe :8

C:\WINDOWS\system32\wbem\Logs\wbemprox.log を確認すると、

(Mon Aug 31 15:16:28 2009.23203171) : GetUserDefaultLCID failed, restorting to system verion

ってエラーメッセージが出力されている。

ぐぐってみると、いろいろでてくる。
Windows Sysinternals Forums have moved...
Windows Sysinternals Forums have moved...

今日はここまでにしておく。