コマンドプロンプトからリモートPCのサービスを復活させる

この記事はWindows & Microsoft技術 基礎 Advent Calendar 2015の4日目の記事です。

Remote DesktopなどのGUIが利用できない状況で、RPCなどが生きている環境に対してサービスを登録して、サービスを起動するという作業を行ってみます。

単にGUIを使わないアプリケーションの起動ならば PsToolキットに含まれる PsExec を使うという手もあります

E:\psexec>psexec \\mofmof ipconfig

PsExec v2.11 - Execute processes remotely
Copyright (C) 2001-2014 Mark Russinovich
Sysinternals - www.sysinternals.com

Windows IP 構成

イーサネット アダプター vEthernet (Intel(R) 82578DM Gigabit Network Connection -
 Virtual Switch):


まず、ターゲットマシン snowstorm とローカルマシンの ID/Password が合致していないという想定で
なお、コマンドプロンプトは管理者モードで起動してください。

C:\>net use

新しい接続は記憶されません。

ステータス  ローカル名 リモート名                ネットワーク名

-------------------------------------------------------------------------------
切断         N:        \\mofmof\pfw                Microsoft Windows Network
切断                    \\snowstorm\IPC$          Microsoft Windows Network

コマンドは正常に終了しました。

接続ができている場合は、一旦、接続を解除して、ログインしなおします
(REG.EXE 等を実行するためにはこの操作が必要です)

C:\>net use \\snowstorm\IPC$ /delete

C:\>net use \\snowstorm\IPC$ /USER:User Pass

ターゲットのサービス(imof.exe) が起動できているかtasklist コマンドで確認します

C:\>tasklist /s snowstorm /u User /p Pass /FI "IMAGENAME eq i*"

イメージ名                     PID
=========================
IEXPLORE.EXE                  1284
IEXPLORE.EXE                  2964

あれ、サービスが落ちているぞ

SC.EXE でリモートからサービスを起動してみましょう

C:\>sc \\snowstorm start IMOFMOF_Service
[SC] StartService: OpenService FAILED 1060:

指定されたサービスはインストールされたサービスとして存在しません。

なんということでしょう。サービスが何らかの原因で消えてしまったのがサービスが動作していない原因のようです。

まず、ローカルPCでサービス登録用のレジストリを流し込みます。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\IMOFMOF_Service]
"Type"=dword:00000010
"Start"=dword:00000002
"ErrorControl"=dword:00000001
"ImagePath"=hex(2):63,00,3a,00,5c,00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,\
  20,00,46,00,69,00,6c,00,65,00,73,00,5c,00,69,00,6d,00,6f,00,66,00,5c,00,69,\
  00,6d,00,6f,00,66,00,2e,00,65,00,78,00,65,00,20,00,2f,00,70,00,3d,00,31,00,\
  32,00,33,00,00,00
"DisplayName"="IMOFMOF_Service"
"ObjectName"="LocalSystem"

imof.reg

remo1
ネットワークレジストリに接続して流し込んでもいいですし

REGコマンドで流し込んでもいいです

C:\>REG SAVE HKLM\\SYSTEM\CurrentControlSet\services\IMOF_Service MOF.REG

C:\>REG SAVE \\SNOWSTORM\HKLM\\SYSTEM\CurrentControlSet\services\IMOF_Service MOF.REG

エラー: 指定されたレジストリ キーまたは値が見つかりませんでした

ただ、こちらは、キーの上書しかできないので
REG ADD コマンドで一つずつかきこまなくてはいけません

C:\>REG ADD \\SNOWSTORM\HKLM\\SYSTEM\CurrentControlSet\services\IMOF_Service

この操作を正しく終了しました。

C:\>REG ADD \\SNOWSTORM\HKLM\\SYSTEM\CurrentControlSet\services\IMOF_Service /t REG_SZ /v DisplayName /d IMOFMOF_Service"

この操作を正しく終了しました。

全部やるのは面倒ですね
全部終わったらREG QUERYで確認

C:\>REG QUERY \\SNOWSTORM\HKLM\\SYSTEM\CurrentControlSet\services\IMOF_Service

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\IMOF_SERVICE
    DisplayName    REG_SZ    IMOF_SERVICE
    ErrorControl    REG_DWORD    0x1
    ImagePath    REG_EXPAND_SZ    C:\Program Files\IMOF\IMOF.EXE
    Start    REG_DWORD    0x4
    Type    REG_DWORD    0x2
    Description    REG_SZ   IMOF_SERVICE

一旦リモートにコピーして、リモート側で regedit /s でインポートするかネットワークレジストリ使うのが楽ですね

レジストリをインポートできたらサービスの作成と起動です

C:\>sc \\snowstorm create IMOF_Service binPath= "C:\TrueRem
ote\brynhildr.exe /service /p:3389"
[SC] CreateService SUCCESS

C:\>sc \\snowstorm start IMOF_Service

SERVICE_NAME: IMOF_Service
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 4  RUNNING
                                (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0
        PID                : 2368
        FLAGS              :

うまくいきました

C:\>tasklist /s snowstorm /u User /p Pass /FI "IMAGENAME eq i*"

イメージ名      
;               PID
=========================
IEXPLORE.EXE                  1284
IEXPLORE.EXE                  2964
IMOF.EXE                             2368

最後にサービスが動いてるのを確認して終わりです

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です