ネットワーククライアントの特定ユーザーレジストリキーを操作する

REGコマンドはコンソールからネットワークを介してクライアントのレジストリキーの値を操作する事が可能ですが、HKEY_LOCAL_MACHINEとHKEY_USERS以外は参照できません。
これはREGコマンドがログインしているユーザーを認識しない仕様であるためですが、クライアントの管理をする上では、少々不便です。
そこで、クライアントにログインしているユーザーレジストリをリモートで操作する方法について、知識を共有します。

注意点

Windows VistaWindows7Windows Server 2008ではRemote Registryサービスが起動していない場合があります。
Remote Registryサービスが起動していないと、リモートでのレジストリ操作ができないため、必要に応じて起動してください。

以下の例はクライアントpcnameのRemote Registryサービスを起動します。

SC \\pcname start RemoteRegistry

上と同じ条件でRemote Registryサービスを停止する場合は、以下のようにします。

SC \\pcname stop RemoteRegistry

ユーザー情報の参照先

レジストリでは、そのパソコンにおいてユニークな名前で各ログインユーザー情報を保存しています。
これらの情報はルートキーのHKEY_USERS以下に保存されており、現在ログインしているユーザーレジストリであるルートキーHKEY_CURRENT_USERも含みます。

クライアントに接続する

クライアントのレジストリを参照するには、クライアントへの接続が必要な場合があります。
接続が必要な場合はUSE NETコマンドを使用してください。
今回は説明を割愛します。

ログインユーザー名を調べる

まず、HKEY_USERS以下にあるレジストリキーを全て取得します。

以下の例は、クライアントpcnameのHKEY_USERS以下のレジストリキーを全て列挙するコマンドです。

REG QUERY \\pcname\HKEY_USERS

結果の例

HKEY_USERS\.DEFAULT
HKEY_USERS\S-000
HKEY_USERS\S-000_Classes
HKEY_USERS\S-111
HKEY_USERS\S-111_Classes
HKEY_USERS\S-222

レジストリではログインユーザーをユニークなキーで管理しており、それは人間にとっては分かりづらい値になっています。
ここからログインユーザー名を知る事は出来ないため、HKEY_USERSの各ユーザーレジストリルートから、目的のユーザーレジストリを探し出す必要があります。

以下の例は、クライアントpcnameのHKEY_USERSにあるS-000レジストリキーのログインユーザー名を取得します。

REG QUERY \\pcname\HKEY_USERS\S-000\Software\Microsoft\Windows\CurrentVersion\Explorer /v "Logon User Name"

結果の例
下の例ではuserがレジストリを使用しているログインユーザー名となります。

    Logon User Name    REG_SZ    user

レジストリを参照と操作

REGコマンドでクライアントのレジストリキーを操作する事が可能ですが、以下の点に注意が必要です。
レジストリのキーや値は操作できますが、インポート、エクスポート、リストア、ハイブファイルのロードとアンロードができません。
これらの操作はクライアントマシンのローカル上で実行する必要があるためです。

クライアントから切断する

クライアントにNET USEコマンドで接続した場合は、net useの/deleteオプションを使用して切断します。
立つ鳥跡を濁さずです。

このノウハウの使い道

セキュリティポリシーの適用、資産管理などで役立ちます。
数百台のクライアントコンピュータを有し、ActiveDirectory等による一元管理の適用が困難なローカルユーザーを持つネットワークでは重宝します。