游历注册表
你可用和游历文件系统驱动器类似的技巧游历注册表。PowerShell中,注册表HKEY_LOCAL_MACHINE hive映射为HKLM: PowerShell驱动器,而HKEY_CURRENT_USER hive被映射为HKCU: PowerShell驱动器。
示例:
[code:1]PS C:\> cd HKLM:
PS HKLM:\> dir
Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE
SKC VC Name Property
--- -- ---- --------
4 0 HARDWARE {}
1 0 SAM {}
Get-ChildItem : Requested registry access is not allowed.
At line:1 char:3
+ dir <<<<
26 0 SOFTWARE {}
8 0 SYSTEM {}[/code:1]
你或许注意到,在注册表驱动器中dir(Get-ChildItem)的输出和文件系统驱动器中的不同。注册表驱动器包含的信息不同,PowerShell相应提供了不同的数据视图。在此,重要的是获知有多少子键和项,因此输出中包含了子键总数(SKC)和项值总数(VC),以及子键和项的名字。
[code:1]PS HKLM:\> cd 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager'
PS HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager> dir
Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentC
ontrolSet\Control\Session Manager
SKC VC Name Property
--- -- ---- --------
0 1 AppCompatibility {AppCompatCache}
15 0 AppPatches {}
0 6 DOS Devices {AUX, MAILSLOT, NUL, PIPE...}
0 15 Environment {ComSpec, Path, windir, FP_NO_HOST_CH...[/code:1]
直至遇到注册表项之前,你不会觉得有什么不同。注册表键中的项被看作它们所在键的属性,因此,你可以用Get-ItemProperty去获取它们。
比如,要通过注册表获得本机的主机名:
[code:1]PS C:\> cd HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
PS HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters> Get-ItemProperty -p
ath . -name hostname
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SYSTEM\Cu
rrentControlSet\Services\Tcpip\Parameters
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SYSTEM\Cu
rrentControlSet\Services\Tcpip
PSChildName : Parameters
PSDrive : HKLM
PSProvider : Microsoft.PowerShell.Core\Registry
Hostname : MozilaFoundation[/code:1]
