• 締切済み

レジストリHKEY_USERSのSID以下の編集

複数のクライアントにて、レジストリの「HKEY_USERS\(SID)\」以下のある値を編集する実行ファイルを作成したいと考えています。 しかし、「(SID)」の部分が端末毎に異なっているため、レジストリエディタより、regファイルを作成しても、他の端末では正しく実行できません。 端末毎に適切な「(SID)」を用いて、レジストリ登録をするにはどのようにすればよいのでしょうか? 宜しくお願いします。

みんなの回答

  • deadline
  • ベストアンサー率63% (1239/1943)
回答No.1

各端末のレジストリから、SIDごとに".reg"ファイルを書き出す方法です。(XP上で検証しています。2000の場合には、"reg"コマンドが標準ではインストールされていないので、サポートツールをインストールする必要があります。) 下記(====と====の間、====行は含まない)をテキストエディタにコピー&ペーストして、sid.cmdの名前を付けて保存し、各端末上で実行すると、指定したフォルダに"S-1-"で始まる".reg"ファイルが作成されます。 ==================この下から================== set fldr=○○○○○○○○ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /s | find "S-1" > %fldr%\sid.lst for /f "delims=" %%s in ('type %fldr%\sid.lst') do ( set sid=%%s reg export "HKU\%sid:~76%\○○○○○○○○" %fldr%\%sid:~76%.reg ) del %fldr%\sid.lst ==================この上まで================== 以下、各行の実行コマンドの解説です。 1行目: 変数"fldr"に".reg"ファイルを書き出すフォルダ名をセットします。○○○○○○○の部分に、".reg"ファイルを書き出したいフォルダを指定してください。 例:set fldr=C:\WINDOWS\Temp 例:set fldr="C:\Documents and Settings\Administrator"  (←フォルダ名に半角スペースが含まれているので、二重引用符で括る) 2行目: "reg"コマンドの"query"+"/s"オプションで、"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"キー以下のサブキーと値を出力し、その後の"find"コマンドで、SIDを意味する"S-1"で始まるキーだけを"sid.lst"ファイルに出力します。 3行目~6行目: "sid.lst"ファイルに出力されたSIDの数だけ4~5行目を繰り返します。 4行目: "sid.lst"ファイル内のSIDを1つ目から順に変数SIDにセットします。 5行目: "reg"コマンドの"export"オプションで、"HKU\%sid:~76%\○○○○○○○○"キー以下を、1行目で指定したフォルダの"S-1-......reg"ファイルに出力します。○○○○○○○○の部分に書き出したいキー名を指定してください。 例:"HKU\%sid:~76%\Environment"で、"HKEY_USERS\S-1-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxx\Environment"キーの内容が書き出されます。(このキーはユーザー環境変数の設定を保持しているキーです。) 7行目: "sid.lst"は一時的に使用するだけなので、最後に削除しています。 なお、直接レジストリを変更したいのでしたら、5行目の"reg"コマンドの"query"オプションを"add"オプションや"delete"オプションに変更し、必要なパラメータを指定します。複数のキーや値を変更したい場合には、5行目と6行目の")"の間に同様に記述します。 "reg"コマンドの使い方は、 reg /? reg query /? reg add /? reg delete /? 等で確認してください。

関連するQ&A

専門家に質問してみよう