レジストリ データの取得

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 です。サブキーは MicrosoftDirectX で、名前付き値のエントリは InstalledVersion です

RegistryKeyChangeEvent は、特定のキーに対する変更が発生したときに発生しますが、エントリは値の変化を識別せず、指定されたキーの下の変更によってこのイベントがトリガーされることもありません。 階層キー構造内の任意の場所で変更を識別するには、 RegistryTreeChangeEvent を使用します。これは、発生した特定の値やキーの変更を返しません。 特定のエントリ値の変更を取得するには、 RegistryValueChangeEvent を使用し、エントリを読み取ってベースライン値を取得します。

StdRegProv には、C++ またはスクリプトから呼び出すことができるメソッドのみが含まれています。これは Win32 クラス構造とは異なります。

次のコード例は、 StdRegProv.EnumKey メソッドを使用して、レジストリ キーの下にあるすべての Microsoft ソフトウェア サブキーを一覧表示する方法を示しています。

Hkey_local_machine\ソフトウェア\マイクロソフト

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\システム\現在のコントロール セット\サービス\Eventlog\システム

複数文字列値の項目はコレクションまたは配列として扱われることに注意してください。

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 を使用してバイナリ レジストリ値を読み取ります。

WMI タスク: レジストリ