Sdílet prostřednictvím


Úlohy služby WMI: Registr

Úlohy rozhraní WMI pro registr vytvářejí a upravují klíče a hodnoty registru. Další příklady najdete na webu TechNet ScriptCenter na https://www.microsoft.com/technet.

Příklady skriptů uvedené v tomto tématu získávají data pouze z místního počítače. Další informace o tom, jak pomocí skriptu získat data ze vzdálených počítačů, naleznete v tématu Připojení k rozhraní WMI na vzdáleném počítači.

Následující postup popisuje, jak spustit skript.

Spuštění skriptu

  1. Zkopírujte kód a uložte ho do souboru s příponou .vbs, například název_souboru.vbs. Ujistěte se, že textový editor nepřidá do souboru .txt příponu.
  2. Otevřete okno příkazového řádku a přejděte do adresáře, do kterého jste soubor uložili.
  3. Na příkazovém řádku zadejte cscript filename.vbs.
  4. Pokud nemáte přístup k protokolu událostí, zkontrolujte, jestli používáte příkazový řádek se zvýšenými oprávněními. Některé protokoly událostí, jako je protokol událostí zabezpečení, můžou být chráněné řízením uživatelských přístupů (UAC).

Poznámka

Ve výchozím nastavení cscript zobrazí výstup skriptu v okně příkazového řádku. Vzhledem k tomu, že skripty rozhraní WMI můžou vytvářet velké objemy výstupu, můžete chtít výstup přesměrovat na soubor. Na příkazovém řádku zadejte cscript filename.vbs > outfile.txt a přesměrujte výstup skriptu název_souboru.vbs do outfile.txt.

Následující tabulka uvádí příklady skriptů, které lze použít k získání různých typů dat z místního počítače.

Jak můžu... Třídy nebo metody služby WMI
... čtení hodnot klíčů registru pomocí rozhraní WMI? Použijte třídu StdRegProv umístěnou v kořenovém\výchozím oboru názvů. Nelze získat žádné instance této třídy, protože Poskytovatel systémového registru je pouze metoda a zprostředkovatel událostí. Data registru však můžete získat prostřednictvím metod, jako je EnumKey nebo EnumValue. Win32_Registry, umístěný v kořenovém\cimv2 oboru názvů, získá data o registru jako celku, například jak velká je.
VB
const HKEY_CURRENT_USER = &H80000001
strComputer = "."
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "Console"
strValueName = "HistoryBufferSize"
oReg.GetDWORDValue HKEY_CURRENT_USER,strKeyPath,strValueName,dwValue
WScript.Echo "Current History Buffer Size: " & dwValue
PowerShell
$HKEY_CURRENT_USER =2147483649
$computer ='.'
$reg = [WMIClass]"ROOT\DEFAULT:StdRegProv"
$Key = "Console"
$Value = "HistoryBufferSize"
$results = $reg.GetDWORDValue($HKEY_CURRENT_USER, $Key, $value)
"Current History Buffer Size: {0}" -f $results.uValue
... vytvořit nový klíč registru?

Použijte třídu StdRegProv umístěnou v oboru názvů root\default a metodu CreateKey.

VB
              
              const HKEY_LOCAL_MACHINE = &H80000002 strComputer = "." Set objReg=GetObject( "winmgmts:{impersonationLevel=impersonate}!\" & strComputer & "\root\default:StdRegProv") 

strKeyPath = "SOFTWARE\NewKey" objReg.CreateKey HKEY_LOCAL_MACHINE,strKeyPath WScript.Echo "Created registry key HKEY_LOCAL_MACHINE\SOFTWARE\NewKey"

PowerShell
$HKEY_Local_Machine =2147483650 
$computer ='.'
$reg = [WMIClass]"ROOT\DEFAULT:StdRegProv"
$Key     = "SOFTWARE\NewKey"
$results   = $reg.CreateKey($HKEY_LOCAL_MACHINE, $Key)
If ($results.Returnvalue -eq 0) {"Key created"} 
... vytvořit novou hodnotu registru pod klíčem?

Použijte třídu StdRegProv umístěnou v kořenovém\výchozím oboru názvů a metodu CreateKey. Pak použijte jednu z metod Set v závislosti na tom, jaký typ registru je hodnota, například SetDWORDValue. Metody Set vytvoří hodnotu, pokud ještě neexistuje. Další informace naleznete v tématu Mapování datového typu registru na datový typ rozhraní WMI.

VB
Const HKEY_LOCAL_MACHINE = &H80000002
strKeyPath = "SOFTWARE\NewKey"
strComputer = "."
Set objReg=GetObject( "winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strValueName = "Example_Expanded_String_Value"
strValue = "%PATHEXT%"
objReg.SetExpandedStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue
WScript.Echo "Example expanded_String_Value at " & "HKEY_LOCAL_MACHINE\SOFTWARE\NewKey"
PowerShell
$HKEY_Local_Machine =2147483650 
$computer ='.'
$reg = [WMIClass]"ROOT\DEFAULT:StdRegProv"
$ValueName = "Example_Expanded_String_Value"
$Value     = "%PATHEXT%"
$Key       = "SOFTWARE\NewKey"
$results   = $reg.SetExpandedStringValue($HKEY_LOCAL_MACHINE, $Key, $ValueName, $Value)
If ($results.Returnvalue -eq 0) {"Value created"}
... Při pokusu o zápis skriptu pro čtení registru se vyhnete chybě Neplatné třídy?

Při přístupu ke třídě StdRegProv použijte kořenový\výchozí obor názvů. stdRegProv není součástí oboru názvů cimv2, což je důvod, proč se vygeneruje chyba Neplatná třída, pokud se pokusíte připojit ke kořenové\cimv2:StdRegProv.

VB
Const HKEY_CURRENT_USER = &H80000001
strComputer = "."
Set oReg=GetObject( "winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv") 
strKeyPath = "Console"
strValueName = "HistoryBufferSize"
oReg.GetDWORDValue HKEY_CURRENT_USER, strKeyPath, strValueName, dwValue
Wscript.Echo "Current History Buffer Size: " & dwValue
... zkontrolujte zabezpečení konkrétního klíče registru?

Použijte třídu StdRegProv umístěnou v oboru názvů root\default a metodu CheckAccess. Přístupová práva můžete zkontrolovat pouze pro aktuálního uživatele, který spouští skript nebo aplikaci. Přístupová práva pro jiného zadaného uživatele nelze zkontrolovat.

... čtení a zápis hodnot binárního registru?

Použijte třídu StdRegProv umístěnou v oboru názvů Root\Default a GetBinaryValue a Metody SetBinaryValue. Hodnoty registru, které se zobrazují v nástroji RegEdt32 jako řada šestnáctkových hodnot bajtů, jsou ve formátu dat REG_BINARY. Další informace naleznete v tématu Mapování datového typu registru na datový typ rozhraní WMI. Následující příklad kódu VBScript vytvoří nový klíč s binární hodnotou. Binární hodnota je zadána v iValues bajtové pole zadané v hex.

VB
              
              const HKEY_LOCAL_MACHINE = &H80000002 strKeyPath = "SOFTWARE\NewKey" strComputer = "." iValues = Array(&H01;&Ha2,&H10) Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv") oReg.CreateKey HKEY_LOCAL_MACHINE,strKeyPath strKeyPath = "SOFTWARE\NewKey" BinaryValueName = "Příklad binární hodnoty" 

oReg.SetBinaryValue HKEY_LOCAL_MACHINE,strKeyPath,BinaryValueName,iValues

Následující skript přečte binární hodnotu.

VB
const HKEY_LOCAL_MACHINE = &H80000002 
strKeyPath = "SOFTWARE\NewKey"
strValueName = "Example Binary Value"
strComputer = "."
dim iValues(3)
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
oReg.GetBinaryValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,iValues
For i = lBound(iValues) to uBound(iValues)
Wscript.Echo iValues(i)
Next
PowerShell
$HKEY_Local_Machine =2147483650 
$computer ='.'
$reg = [WMIClass]"ROOT\DEFAULT:StdRegProv"
$ValueName = "Example Binary Value"
$Values     = @(0x54, 0x46, 0x4C)
$Key       = "SOFTWARE\NewKey"
$results   = $reg.GetBinaryValue($HKEY_LOCAL_MACHINE, $Key, $ValueName)
Foreach ($byte in $results.uvalue) {"{0}" -f $byte.tostring("x")}
... Čtení a zápis hodnot registru, které obsahují více řetězců?

Použijte třídu StdRegProv umístěnou v oboru názvů root\default a metody GetMultiStringValue a SetMultiStringValue metody. Klíče registru, které se zobrazují v nástroji RegEdt32 jako řada řetězců oddělených mezerami, jsou ve REG_MULTI_SZ datovém formátu. Další informace naleznete v tématu Mapování datového typu registru na datový typ rozhraní WMI. Následující příklad kódu VBScript vytvoří nový klíč a novou hodnotu víceřetězení.

VB
const HKEY_LOCAL_MACHINE = &H80000002
strKeyPath = "SOFTWARE\NewKey"
MultValueName = "Example Multistring Value"
strComputer = "."
iValues = Array("string1", "string2")
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
oReg.CreateKey HKEY_LOCAL_MACHINE,strKeyPath
oReg.SetMultiStringValue HKEY_LOCAL_MACHINE,strKeyPath,MultValueName,iValues
PowerShell
$HKEY_Local_Machine =2147483650 
$computer ='.'
$reg = [WMIClass]"ROOT\DEFAULT:StdRegProv"
$Key       = "SOFTWARE\NewKey"
$ValueName = "Example MultiString Value"
$Values     = @("Thomas", "Susan", "Rebecca")
$Key       = "SOFTWARE\NewKey"
$results   = $reg.SetMultiStringValue($HKEY_LOCAL_MACHINE, $Key, $ValueName, $Values)
If ($results.Returnvalue -eq 0) {"Value Set"} 

Následující skript přečte hodnotu s víceřetěžci.

VB
const HKEY_LOCAL_MACHINE = &H80000002
strKeyPath = "SOFTWARE\NewKey"
strComputer = "."
iValues = Array("string1", "string2")
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
MultValueName = "Example Multistring Value"
oReg.GetMultiStringValue HKEY_LOCAL_MACHINE,strKeyPath,MultValueName,iValues
For Each strValue In iValues
WScript.echo strValue
Next
PowerShell
# Define Constants
$HKEY_Local_Machine =2147483650 
$computer ='.'
$reg = [WMIClass]"ROOT\DEFAULT:StdRegProv"
$Key       = "SOFTWARE\NewKey"
$ValueName = "Example MultiString Value"
$results   = $reg.GetMultiStringValue($HKEY_LOCAL_MACHINE, $Key, $ValueName)
$results.svalue
... odebrat klíč registru?

Použijte třídu StdRegProv umístěnou v oboru názvů root\default a metody DeleteKey.

PowerShell
$HKEY_Local_Machine =2147483650 
$computer ='.'
$reg = [WMIClass]"ROOT\DEFAULT:StdRegProv"
$Key     = "SOFTWARE\NewKey"
$results   = $reg.DeleteKey($HKEY_LOCAL_MACHINE, $Key)
If ($results.Returnvalue -eq 0) {"Key Removed"} 

úlohy rozhraní WMI pro skripty a aplikace

příklady aplikací jazyka WMI C++

TechNet ScriptCenter

úpravy systémového registru

StdRegProv