メモ: 最新のWindows10環境でリモートPC管理！ (ワークグループ環境)

# 概要
RPC (Remote Procedure Call)によるリモートコンピュータ管理は古くからある技術で、ネットでも検索すると2000年のはじめくらいの記事から始まりいろいろなものが引っ掛かります。ただ、どれも10年位前のOSや環境で操作しているものが多く、セキュリティやファイアウォールが強化され、管理コンソールのUIも変更になった最新のOS (Windows 10 Version 1909)では、同じ操作になるよう想像でやってみてもうまく動きませんでした！ 今更改めて最新環境で解説する物好きなエンジニアもいらっしゃらないようなので(笑)、試行錯誤した結果をメモしておくことにしました~(^^)/

# 利用するコマンド
たとえば、リモートPCのプロセス一覧を取得するコマンドなら以下のようなものがあります。

* **tasklist /s <font color="Red"><リモートPC名></font>** : 古くからあるDOSコマンド
* **Get-Process -ComputerName <font color="Red"><リモートPC名></font>** : [PowerShell](https://ja.wikipedia.org/wiki/PowerShell)のコマンド
* **wmic /node:<font color="Red"><リモートPC名></font> process** : WMI ([Windows Management Instrumentation](https://ja.wikipedia.org/wiki/Windows_Management_Instrumentation))

しかし、これらをそのまま実行しても、通常はいろいろなエラーが出ます。

たとえば

```:DOS
C:\>tasklist /s Machine01
エラー: RPC サーバーを利用できません。
```
とか

```:DOS
C:\>tasklist /s Machine01
エラー: アクセスが拒否されました。
```

とかです。
(wmicとtasklist.exeは同じエラーを出します。)

解決方法として、いくつかの設定を行う必要がありますが、ネットワークがドメイン環境か非ドメイン環境 (ワークグループ環境)かによって項目が違います。ドメイン環境の方が、ドメイン管理者が簡単にリモート管理できるようになっています。

尚、PowerShellによるリモートPC管理は、別途PowerShell用のリモートアクセス初期化のお作法 ([Enable-PSRemoting, winrm quickconfig, Set-Item WSMan, etc.](https://qiita.com/arachan@github/items/707ba05befb2d5a5a81a)) が必要になるので、今回は扱わないことにします(^_-)-☆

### ドメイン環境かどうかを判別するコマンド
まず手始めに、使っているPCがドメイン環境かどうかを調べてみたいと思います。GUIを使って調べる方法もありますが、ここではせっかくなのでコマンドラインで調べる方法をいくつか試してみましょう。

コマンドもいくつかありますが、たとえば

```:DOS
C:\>set user
USERDOMAIN=DOMAIN
USERDOMAIN_ROAMINGPROFILE=DOMAIN
USERNAME=User
USERPROFILE=C:\Users\User
```
(USERDOMAIN環境変数の名前がPC名と同じなら非ドメイン環境)とか

```:PowerShell
PS C:\> (Get-WmiObject Win32_ComputerSystem).PartOfDomain
True
```
(PartOfDomain=Trueで返ってくればドメイン環境、Falseは非ドメイン環境)で判定するのがよいでしょう。


# ドメイン環境
ドメイン環境の場合、ドメインの管理者権限を持っているユーザーであれば、同じドメインフォレスト内のPCに対してリモート管理コマンドを発行する際にあまり苦労しません。

ドメインに参加しているPC同士はフツーに通信できますし、ドメイン管理者アカウントを使えばリモートPCの情報を取得する権限も与えられています。ひとつ気にするとすると、ファイアウォールのグループポリシー (gpedit.msc) の設定でしょう。RPCの通信 (TCP135など)がブロックされないようにしておきましょう。

今回はドメイン環境の場合の手順は割愛します。

# ワークグループ環境
ワークグループ環境の場合は、追加でいろいろなチェック項目がありメンドウのようで、あまりまとまって設定項目が書かれたページがなかったので、いろいろと調べてまとめてみました。

### リモートPCの管理者権限ユーザーで実行
ワークグループ環境の場合は、リモートPCの管理者権限を持つアカウントのユーザー名とパスワードが必要になりますので、これは入手していることが前提です。

```:DOS
C:\>tasklist /s Machine01 /u <ユーザー名> /p <パスワード>
```
や

```:DOS
C:\>wmic /node:Machine01 /user:<ユーザー名> /password:<パスワード> process
```
のように指定する必要があります。
(ユーザー名/パスワードを指定しないと、設定がすべて正しくても**「アクセスが拒否されました」**エラーが出ます。)

### ネットワーク探索 (pingが通るか? PC名はあっているか?)
まずは管理用PCから対象のリモートPCにpingが通るか試してみましょう。これが通らないと、相手のネットワーク探索が無効になっている (ワークグループ内で探知されない設定になっている)可能性があります。

```:DOS
C:\>ping Macnine01
ping 要求ではホスト Macnine01 が見つかりませんでした。ホスト名を確認してもう一度実行してください。
```
このような場合は、リモートPCでエクスプローラを開いて「ネットワーク」を開いたときに、**「ネットワーク探索が無効です。」**のエラーが出るようだと、ネットワーク探索が無効になっています。この設定は、既定の状態では無効になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490819/65882747-e8e3-ffa8-fe1f-b2a9786123ad.png)
「OK」ボタンをクリックして表示される「黄色い帯」をクリックして表示される「ネットワーク探索とファイル共有の有効化」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490819/5c17f891-0b6c-ba54-ae44-db302b153b6a.png)
その後、表示されるダイアログボックスで、「いいえ」を選択して、プライベートネットワークでのみネットワーク探索を有効にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490819/ebe8393b-08ad-cf14-ca19-2790dc3be157.png)
これで設定は完了です。

管理用PCからpingが通るようになったか確認してみてください。

```:DOS
C:\>ping Macnine01
Machine01 [192.168.237.44]に ping を送信しています 32 バイトのデータ:
192.168.237.44 からの応答: バイト数 =32 時間 <1ms TTL=128
192.168.237.44 からの応答: バイト数 =32 時間 <1ms TTL=128
192.168.237.44 からの応答: バイト数 =32 時間 <1ms TTL=128
192.168.237.44 からの応答: バイト数 =32 時間 <1ms TTL=128

192.168.237.44 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 0ms、最大 = 0ms、平均 = 0ms
```


設定を確認したいときは、「Windowsの設定」を開き、「ネットワークとインターネット」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490819/e3ab054f-be4e-12c4-724c-915aad554d82.png)
次に、現在利用しているネットワークの「共有オプション」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490819/36b499e0-6548-3db2-4048-4566083c8a22.png)
すると、現在利用しているプロファイル (プライベート)のネットワーク探査についてのオプションが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490819/a4bfa0ba-01fd-3f06-8a2c-b7322fe44a3b.png)


### ファイアウォールの例外設定
pingが通るようになっても、なお**「エラー: RPC サーバーを利用できません。」**や**「リモート コンピューターに接続できませんでした。」**というエラーが出る場合は、ファイアウォールによってトラフィックがブロックされている可能性があります。

ここでは標準で使っているWindows Defenderファイアウォールの場合を見てみます。他のセキュリティソフトウェアを入れている場合は、また違った手順になってきます。

「Windowsの設定」を開き、「ネットワークとインターネット」をクリック、現在利用しているネットワークの「Windowsファイアウォール」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490819/86e6efde-81dd-33b3-7652-af52092eb4a1.png)
別ウィンドウで開いた「Windowsセキュリティ」の「ファイアウォールによるアプリケーションの許可」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490819/35062785-23b1-42e5-c0d7-5dd61b6a05e6.png)
さらに、別ウィンドウで設定画面が表示されるので、「設定の変更」ボタンをクリックして、「Windows Management Instrumentation (WMI)」を探して、使っているプロファイル (プライベート)のところのチェックをONにして「OK」ボタンをクリックします。これでwmic.exeやtasklist.exeのコマンドは通るようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490819/c3134799-f073-b708-a336-480ca637bb5e.png)

### リモートUAC
ワークグループ環境の場合にのみ関係がある設定項目としてリモートUAC (Windows [ユーザーアカウント制御](https://ja.wikipedia.org/wiki/%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E5%88%B6%E5%BE%A1)) があります。ドメイン環境の時はドメイン管理者であればUACのブロックは受けません。

リモートUACを解除するには、レジストリエディア (regedit)を使って管理者モードでレジストリを変更します。

* 変更(作成)するキー: `\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System`
* 変更(作成)する名前: `LocalAccountTokenFilterPolicy` (DWORD)
* 値: 1 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490819/39baa522-f428-df99-92a0-0c27f276344a.png)

レジストリを変更した後は、一度リモートPCを再起動します。
これでリモートUACの影響をうけなくなります。

# 設定がすべてうまくいくと取得できる結果

```:DOS
C:\>tasklist /s Machine01 /u User /p Password

イメージ名                     PID セッション名     セッション# メモリ使用量
========================= ======== ================ =========== ============
System Idle Process              0                            0          8 K
System                           4                            0        132 K
Registry                        96                            0     25,940 K
smss.exe                       404                            0        580 K
csrss.exe                      516                            0      2,592 K
wininit.exe                    592                            0      2,932 K
csrss.exe                      604                            1      3,004 K
winlogon.exe                   692                            1      7,128 K
services.exe                   736                            0      6,184 K
lsass.exe                      752                            0     12,952 K
svchost.exe                    868                            0     28,288 K

... (中略) ...

RuntimeBroker.exe             6092                            1     13,180 K
ImeBroker.exe                 4408                            1     10,660 K
svchost.exe                   2632                            0      8,892 K
dasHost.exe                   2564                            0      7,248 K
YourPhoneServer.exe           5528                            1      9,788 K
svchost.exe                   5064                            0      4,656 K
SecurityHealthHost.exe        6992                            1     30,160 K
YourPhone.exe                 1932                            1        328 K
RuntimeBroker.exe             9048                            1      7,824 K
smartscreen.exe               6872                            1     22,968 K
SnippingTool.exe              2032                            1     28,648 K
usocoreworker.exe              860                            0     15,900 K
SystemSettings.exe            6584                            1     72,632 K
SecHealthUI.exe               4040                            1     49,456 K
RuntimeBroker.exe             3888                            1     17,204 K
WmiPrvSE.exe                  1364                            0     10,448 K
```

とか

```:DOS
C:\>wmic /node:Machine01 /user:User /password:Password process
Caption                                                             CommandLine                                                                                                                                                                                                                                                                                                                             CreationClassName  CreationDate               CSCreationClassName   CSName          Description                                                         ExecutablePath                                                                                                         ExecutionState  Handle  HandleCount  InstallDate  KernelModeTime  MaximumWorkingSetSize  MinimumWorkingSetSize  Name                                                                OSCreationClassName    OSName                                                                              OtherOperationCount  OtherTransferCount  PageFaults  PageFileUsage  ParentProcessId  PeakPageFileUsage  PeakVirtualSize  PeakWorkingSetSize  Priority  PrivatePageCount  ProcessId  QuotaNonPagedPoolUsage  QuotaPagedPoolUsage  QuotaPeakNonPagedPoolUsage  QuotaPeakPagedPoolUsage  ReadOperationCount  ReadTransferCount  SessionId  Status  TerminationDate  ThreadCount  UserModeTime  VirtualSize    WindowsVersion  WorkingSetSize  WriteOperationCount  WriteTransferCount
System Idle Process                                                                                                                                                                                                                                                                                                                                                                                         Win32_Process      20200320104953.730805+540  Win32_ComputerSystem  WINDEV2001EVAL  System Idle Process                                                                                                                                                                                        0       0                         4629084531250                                                 System Idle Process                                                 Win32_OperatingSystem  Microsoft Windows 10 Enterprise Evaluation|C:\WINDOWS|\Device\Harddisk0\Partition2  0                    0                   9           60             0                60                 8192             12                  0         61440             0          1                       0                    1                           0                        0                   0                  0                                   4            0             8192           10.0.18363      8192            0                    0
System                                                                                                                                                                                                                                                                                                                                                                                                      Win32_Process      20200320104953.730805+540  Win32_ComputerSystem  WINDEV2001EVAL  System                                                                                                                                                                                                     4       3066                      1036718750                                                    System                                                              Win32_OperatingSystem  Microsoft Windows 10 Enterprise Evaluation|C:\WINDOWS|\Device\Harddisk0\Partition2  1313938              4148340             3042        196            0                216                13864960         764                 8         200704            4          1                       0                    1                           0                        325                 920896             0                                   148          0             3932160        10.0.18363      135168          2359                 438755707
Registry                                                                                                                                                                                                                                                                                                                                                                                                    Win32_Process      20200320104952.546576+540  Win32_ComputerSystem  WINDEV2001EVAL  Registry                                                                                                                                                                                                   96      0                         50625000                                                      Registry                                                            Win32_OperatingSystem  Microsoft Windows 10 Enterprise Evaluation|C:\WINDOWS|\Device\Harddisk0\Partition2  813                  4547                169480      7404           4                186764             257949696        250460              8         7581696           96         20                      289                  30                          497                      4                   2048               0                                   4            0             149127168      10.0.18363      26722304        15527                286720000
smss.exe                                                                                                                                                                                                                                                                                                                                                                                                    Win32_Process      20200320104953.741647+540  Win32_ComputerSystem  WINDEV2001EVAL  smss.exe                                                                                                                                                                                                   404     56                        625000                                                        smss.exe                                                            Win32_OperatingSystem  Microsoft Windows 10 Enterprise Evaluation|C:\WINDOWS|\Device\Harddisk0\Partition2  477                  6954                1273        1160           4                1224               2203368091648    1260                11        1187840           404        4                       13                   9                           24                       21                  9108               0                                   2            0             2203359707136  10.0.18363      593920          23                   67732

... (中略) ...


WmiPrvSE.exe                                                        C:\WINDOWS\system32\wbem\wmiprvse.exe                                                                                                                                                                                                                                                                                                   Win32_Process      20200321190544.870086+540  Win32_ComputerSystem  WINDEV2001EVAL  WmiPrvSE.exe                                                        C:\WINDOWS\system32\wbem\wmiprvse.exe                                                                                                  8460    165                       156250          1380                   200                    WmiPrvSE.exe                                                        Win32_OperatingSystem  Microsoft Windows 10 Enterprise Evaluation|C:\WINDOWS|\Device\Harddisk0\Partition2  73                   936                 2222        2764           868              2764               2203396718592    8528                8         2830336           8460       11                      77                   11                          78                       0                   0                  0                                   9            156250        2203396718592  10.0.18363      8728576         0                    0
```

といった具合に取れます。

# まとめ
まとめると、エラーが出た場合のチェック項目には以下のようなものがあります。

* **ドメイン環境かどうか**: リモートPCと管理用PCが同じドメイン環境に入っている場合はチェック項目が大幅に減ります。ドメインがないワークグループ環境の場合は、追加でいくつかの設定の確認と変更が必要です。
* **ネットワーク探索/サブネット**: リモートPCが管理用PCから探索できるようにします。これが設定されていないと**「エラー: RPC サーバーを利用できません。」**が出ます。
* **ファイアウォールの例外設定**:WMIが例外として許可されるように設定します。これが設定されていないと **「エラー: RPC サーバーを利用できません。」**が出ます。
* **管理者権限**: リモートPCの管理者権限で実行する必要があります。これを忘れると**「エラー: アクセスが拒否されました。」**が出ます。
* **リモートUACの設定**: ワークグループ環境の場合は、リモートPCのレジストリを変更する必要があります。これが設定されていないと**「エラー: アクセスが拒否されました。」**が出ます。

また、他にもリモートPC管理ができるコマンドはいろいろあるので、使ってみてください！

# おまけ: WMIではprocess call createではインタラクティブプロセスを起動できない
WMIではリモートPCでのプロセスの起動もできますが、[セキュリティ上の理由からインタラクティブなプロセスは作成できない](https://docs.microsoft.com/ja-jp/windows/win32/cimwin32prov/create-method-in-class-win32-process)とのこと。
>For security reasons the **Win32_Process.Create** method cannot be used to start an interactive process remotely.

まあ、これができたらいろいろな攻撃ができてしまいますものね。

```:DOS
C:\>wmic /node:Machine01 /user:<ユーザー名> /password:<パスワード> process call create <コマンド名>
```
調べてみましたが、calc.exeなど一部のアプリはインタラクティブモードで起動するものの、notepad.exeやcmd.exeなどはタスクマネージャーを見るとバックグラウンドでプロセスは立ち上がるものの、特にそれ以上実行が進んでいる様子はありません。

Sysinternalで配られている[PsExec](https://docs.microsoft.com/en-us/sysinternals/downloads/psexec)も調べてみましたが、バックグラウンドプロセスしか作れない事情は同じようでした。。。Windows 7ではできたのかもしれないですが、最新のWindows 10 Version 1909ではできないです。

**参考情報**

* [別端末(Windows)のプログラムを標準機能でリモート起動する方法まとめ](https://qiita.com/0829/items/5518256b348521ac358c)