レジストリ データの取得
WMI StdRegProv クラスとそのメソッドを使用して、レジストリ データを取得または変更できます。 Regedit ユーティリティを使用してローカル コンピューターのレジストリ値を表示および変更する場合、StdRegProv を使うと、ローカル コンピューターとリモート コンピューターでこのようなアクティビティを自動化するためにスクリプトまたはアプリケーションを使用できます。
StdRegProv には、次を行うためのメソッドが含まれています。
- ユーザーのアクセス許可を確認する
- レジストリ キーを作成、列挙、削除する
- サブキーまたは名前付き値を作成、列挙、削除する
- データ値の読み取り、書き込み、削除を行う
レジストリ データは、サブツリー、キー、および最上位のキーの下に入れ子になったサブキーによって編成されます。 実際のデータ値は、エントリまたは名前付き値と呼ばれます。
サブツリーには、次のものが含まれます。
- HKEY_CLASSES_ROOT (省略形 HKCR)
- HKEY_CURRENT_USER (HKCU)
- HKEY_LOCAL_MACHINE (HKLM)
- HKEY_USERS
- HKEY_CURRENT_CONFIG
たとえば、レジストリ エントリ HKEY\SOFTWARE\Microsoft\DirectX\InstalledVersion の場合、HKEY サブツリーは SOFTWARE、サブキーは Microsoft と DirectX、名前付き値エントリは InstalledVersion です。
特定のキーに対する変更が発生したときに RegistryKeyChangeEvent が発生しますが、エントリは値がどのように変化するかを識別せず、指定したキーの下の変更によってこのイベントがトリガーされることもありません。 階層キー構造内の任意の場所での変更を識別するには、RegistryTreeChangeEvent を使用します。これは、発生した特定の値やキーの変更を返しません。 特定のエントリ値の変更を取得するには、RegistryValueChangeEvent を使用し、エントリを読み取ってベースライン値を取得します。
StdRegProv には、C++ またはスクリプトから呼び出すことができるメソッドのみが含まれています。これは、Win32 クラス構造とは異なります。
次のコード例は、StdRegProv.EnumKey メソッドを使用して、このレジストリ キーの下にあるすべての Microsoft ソフトウェア サブキーを一覧表示する方法を示しています。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."
Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "SOFTWARE\Microsoft"
objReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys
For Each subkey In arrSubKeys
Wscript.Echo subkey
Next
$HKEY_LOCAL_MACHINE = 2147483650
$strKeyPath = "SOFTWARE\Microsoft"
$objReg = [WMIClass]"root\default:StdRegProv"
$arrSubKeys = $objReg.EnumKey($HKEY_LOCAL_MACHINE, $strKeyPath)
foreach ($subKey in ($arrSubKeys.sNames))
{
$subKey
}
StdRegProv には、さまざまなレジストリ エントリ値データ型を読み取るためのさまざまなメソッドがあります。 エントリに不明な値がある場合は、StdRegProv.EnumValues を呼び出して一覧表示できます。 次の表に、StdRegProv メソッドとデータ型の対応関係を示します。
メソッド | データ型 |
---|---|
GetBinaryValue | REG_BINARY |
GetDWORDValue | REG_DWORD |
GetExpandedStringValue | REG_EXPAND_SZ |
GetMultiStringValue | REG_MULTI_SZ |
GetStringValue | REG_SZ |
次の表に、新しいキーまたは値を作成したり、既存のものを変更したりするための対応するメソッドを示します。
メソッド | データ型 |
---|---|
SetBinaryValue | REG_BINARY |
SetDWORDValue | REG_DWORD |
SetExpandedStringValue | REG_EXPAND_SZ |
SetMultiStringValue | REG_MULTI_SZ |
SetStringValue | REG_SZ |
次の例では、レジストリ キーからシステム イベント ログのソースの一覧を読み取る方法を示します。
HKEY_LOCAL_MACHINE\SYSTEM\Current Control Set\Services\Eventlog\System
multistring 値の項目はコレクションまたは配列として扱われることに注意してください。
const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."
Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\default:StdRegProv")
strKeyPath = "SOFTWARE\Microsoft"
objReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys
For Each subkey In arrSubKeys
Wscript.Echo subkey
Next
レジストリ プロバイダーは LocalSystem ではなく LocalService でホストされます。 そのため、サブツリー HKEY_CURRENT_USER からリモートで情報を取得することはできません。 ただし、ローカル コンピューター上で実行されるスクリプトは引き続き HKEY_CURRENT_USER にアクセスできます。 リモート コンピューターではホスティング モデルを LocalSystem に設定できますが、リモート コンピューター上のレジストリが敵対的なアクセスに対して脆弱であるため、セキュリティ上のリスクがあります。 詳細については、「プロバイダーのホスティングとセキュリティ」を参照してください。
例
TechNet ギャラリーのバイナリ レジストリ値の読み取りの VBScript コード例では、WMI を使用してバイナリ レジストリ値を読み取っています。
関連トピック
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示