Olvasás a registryből

Elsőként nézzük meg, hogy hogyan lehet olvasni a registryből. Például listázzuk ki a registry alapján a számítógépre telepített alkalmazások nevét!

Miután a registryt is egy PSDrive-on keresztül érhetjük el, érdemes lehet akár új, a minket érdeklő információkat tartalmazó ágra új „shortcut” PSDrive-ot definiálni, hogy később már rövidebb elérési úttal is hivatkozhatók legyenek az egyes elemek:

[1] PS I:\>New-PSDrive -Name Uninstall -PSProvider Registry -Root HKLM:\SOFT

WARE\Microsoft\Windows\CurrentVersion\Uninstall

 

Name       Provider      Root                                CurrentLocatio

                                                                          n

----       --------      ----                                --------------

Uninstall  Registry      HKEY_LOCAL_MACHINE\SOFTWARE\Micr...

A mostani feladatunkban például az Uninstall registry kulcsot egy új, „Uninstall” nevű meghajtón keresztül lehet elérni. Erre már nagyon egyszerűen végezhetünk szokásos fájlműveleteket, például kilistázhatjuk az itt található kulcsokat a Get-ChildItem cmdlet segítségével, pédául csak a számmal kezdődőeket:

PS C:\> Get-ChildItem uninstall:\[0-9]*

 

 

    Hive: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninsta

    ll

 

 

Name                           Property

----                           --------

092555911492C6959D2596D612F52D UninstallString : C:\PROGRA~1\DIFX\D29FE547208F

CA71881CA2                     E130\DPInst_x64.exe /u C:\WINDO

                                                 WS\System32\DriverStore\FileR

                               epository\android_winusb.inf_am

                                                 d64_bd75d06c56998078\android_

                               winusb.inf

                               DisplayName     : Windows Driver Package - Goog

                               le, Inc. (WinUSB) AndroidUsbDev

                                                 iceClass  (08/28/2014 11.0.00

                               00.00000)

                               DisplayIcon     : C:\PROGRA~1\DIFX\D29FE547208F

                               E130\DPInst_x64.exe,0

                               DisplayVersion  : 08/28/2014 11.0.0000.00000

                               Publisher       : Google, Inc.

49CF605F02C7954F4E139D18828DE2 UninstallString : rundll32.exe C:\PROGRA~1\DIFX

98CD59217C                     \048B92BA3327CEF8\DIFxAppA.dll,

                                                  DIFxARPUninstallDriverPackag

                               e C:\WINDOWS\System32\DriverSto

                                                 re\FileRepository\grmnusb.inf

                               _amd64_3e4b654f12f06d57\grmnusb

                                                 .inf

                               DisplayName     : Windows Driver Package - Garm

                               in (grmnusb) GARMIN Devices  (0

                                                 6/03/2009 2.3.0.0)

                               DisplayIcon     : C:\PROGRA~1\DIFX\048B92BA3327

                               CEF8\DIFxAppA.dll,0

                               DisplayVersion  : 06/03/2009 2.3.0.0

                               Publisher       : Garmin

7-Zip                          DisplayName     : 7-Zip 15.14 (x64)

                               DisplayVersion  : 15.14

                               DisplayIcon     : C:\Program Files\7-Zip\7zFM.e

                               xe

                               InstallLocation : C:\Program Files\7-Zip\

                               UninstallString : C:\Program Files\7-Zip\Uninst

                               all.exe

                               NoModify        : 1

                               NoRepair        : 1

                               EstimatedSize   : 4843

                               VersionMajor    : 15

                               VersionMinor    : 14

                               Publisher       : Igor Pavlov

                               sEstimatedSize2 : 4843

Nézzük meg ugyanezt a regedittel:

113 . ábra Uninstall registry-ág

Látható, hogy amit mi a Regeditben látunk „fájlként”, azaz a 7-Zip-nél például a DisplayName, az a PowerShell-ben nem „fájl”, hanem az a mappának, ami a „7-Zip”-nek felel meg, a tulajdonsága (property). Ez egy kicsit zavarónak tűnhet, hiszen így a „7-Zip”-nek mint mappának változtathatók a tulajdonságai. De hogyan jutunk hozzá ezekhez a tulajdonságokhoz egyszerűen? Erre is van cmdlet, a Get-ItemProperty :

PS C:\> cd uninstall:

PS Uninstall:\> Get-ItemProperty 7-Zip

 

 

DisplayName     : 7-Zip 15.14 (x64)

DisplayVersion  : 15.14

DisplayIcon     : C:\Program Files\7-Zip\7zFM.exe

InstallLocation : C:\Program Files\7-Zip\

UninstallString : C:\Program Files\7-Zip\Uninstall.exe

NoModify        : 1

NoRepair        : 1

EstimatedSize   : 4843

VersionMajor    : 15

VersionMinor    : 14

Publisher       : Igor Pavlov

sEstimatedSize2 : 4843

PSPath          : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTW

                  ARE\Microsoft\Windows\CurrentVersion\Uninstall\7-Zip

PSParentPath    : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTW

                  ARE\Microsoft\Windows\CurrentVersion\Uninstall

PSChildName     : 7-Zip

PSDrive         : Uninstall

PSProvider      : Microsoft.PowerShell.Core\Registry

Egy kicsit többet is visszaad nekem a PowerShell, mint ami ténylegesen a registryben található: PSPath, PSPartentPath, stb. Ezek természetesen nincsenek benne a registryben, ezeket a PowerShell típusadaptációs rétege teszi hozzá. Sajnos ezeket a plusz adatokat akkor is hozzábiggyeszti, ha csak mondjuk a DisplayName paramétert akarjuk kiolvasni:

PS Uninstall:\> Get-ItemProperty 7-Zip -Name DisplayName

 

 

DisplayName  : 7-Zip 15.14 (x64)

PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE

               \Microsoft\Windows\CurrentVersion\Uninstall\7-Zip

PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE

               \Microsoft\Windows\CurrentVersion\Uninstall

PSChildName  : 7-Zip

PSDrive      : Uninstall

PSProvider   : Microsoft.PowerShell.Core\Registry

PowerShell 5.0 előtt trükközni kell, ha tényleg csak az adott kulcs értékét akarom megtekinteni:

PS Uninstall:\> (Get-ItemProperty 7-Zip).DisplayName

7-Zip 15.14 (x64)

Azaz külön hivatkozni kell az adott kulcs nevére, nem igazán jó a –name paraméter használata. Szerencsére PowerShell 5.0-től új lehetőségünk van a registry érékek közvetlen kiolvasására, a Get‑ItemPropertyValue :

PS Uninstall:\> Get-ItemPropertyValue -Path .\7-Zip -Name DisplayName

7-Zip 15.14 (x64)

Még két lehetőségre hívnám fel a figyelmet a registry kulcsok olvasásával kapcsolatban. Az egyik GetValueNames() metódus, amellyel az adott kulcs tényleges értékeinek neveit lehet kiolvasni. A nevek birtokában aztán például valamelyik ciklussal lehet műveleteket végezni az értékekkel. Erre példaként nézzünk egy szkriptet, amely összeszámolja, hogy gépünkre hány font van telepítve, és abból mennyi a TrueType típusú:

[15] PS C:\> $ttf=0; (get-item "hklm:\\Software\Microsoft\Windows NT\Current

Version\Fonts").GetValueNames() | Where-Object {$_.contains("TrueType")} | F

orEach-Object {$ttf++}; $ttf

277

Ugyanezt a funkciót valósítottam meg következő szkriptben is, csak itt nem a GetValueNames() metódust alkalmaztam, hanem a PowerShell Select-Object  cmdletjét, az ExtendProperty paraméterrel, mellyel egy adott objektum egy adott, tömböt tartalmazó tulajdonságának értékeit lehet kifejteni:

[22] PS C:\> $ttf=0; Get-Item "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVe

rsion\Fonts" | Select-Object -ExpandProperty Property | where-object {$_.con

tains("TrueType")} | ForEach-Object {$ttf++}; $ttf

277



Word To HTML Converter