PowerShell基础教程(24)——处理注册表项 <o:p></o:p>
由于注册表项是 Windows PowerShell 驱动器上的项,因此处理它们的方式与处理文件和文件夹非常类似。一个关键差异是,基于注册表的 Windows PowerShell 驱动器上的每个项都是一个容器,就像文件系统驱动器上的文件夹一样。但是,注册表条目及其关联值是项的属性,而不是不同的项。
使用 Get-ChildItem 可以显示直接在注册表项中的所有项。添加可选的 Force 参数可以显示隐藏项或系统项。例如,此命令显示直接在 Windows PowerShell 驱动器 HKCU:(它对应于 HKEY_CURRENT_USER 注册表配置单元)中的项:
PS> Get-ChildItem -Path hkcu:\<o:p></o:p>
<o:p> </o:p>
<o:p> </o:p>
Hive:Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER<o:p></o:p>
<o:p> </o:p>
SKC VC Name Property<o:p></o:p>
--- -- ---- --------<o:p></o:p>
2 0 AppEvents {}<o:p></o:p>
7 33 Console {ColorTable00, ColorTable01, ColorTab...<o:p></o:p>
25 1 Control Panel {Opened}<o:p></o:p>
0 5 Environment {APR_ICONV_PATH, INCLUDE, LIB, TEMP...}<o:p></o:p>
1 7 Identities {Last Username, Last User ...<o:p></o:p>
4 0 Keyboard Layout {}<o:p></o:p>
...<o:p></o:p>
|
<o:p> </o:p>
这些是在注册表编辑器 (Regedit.exe) 中 HKEY_CURRENT_USER 下可见的顶级项。
也可以通过指定注册表提供程序的名称后跟“::”来指定此注册表路径。注册表提供程序的全名为 Microsoft.PowerShell.Core\Registry,但是它只需简写为 Registry 即可。下列任一命令将列出直接位于 HKCU 下的内容:
Get-ChildItem -Path Registry::HKEY_CURRENT_USER<o:p></o:p>
Get-ChildItem -Path Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER<o:p></o:p>
Get-ChildItem -Path Registry::HKCU<o:p></o:p>
Get-ChildItem -Path Microsoft.PowerShell.Core\Registry::HKCU<o:p></o:p>
Get-ChildItem HKCU:<o:p></o:p>
|
<o:p> </o:p>
这些命令仅列出直接包含的项,与使用 Cmd.exe 的 DIR 命令或 UNIX 外壳程序中的 ls 非常类似。若要显示包含的项,需要指定 Recurse 参数。若要列出 HKCU 中的所有注册表项,请使用以下命令(此操作可能需要极长的时间。):
Get-ChildItem -Path hkcu:\ -Recurse<o:p></o:p>
|
<o:p> </o:p>
Get-ChildItem 可以通过其 Path、Filter、Include 和 Exclude 参数执行复杂的筛选功能,但是这些参数通常仅基于名称。使用 Where-Objectcmdlet 可以基于项的其他属性执行复杂的筛选。以下命令查找 HKCU:\Software 中具有不超过一个子项且正好具有四个值的所有项:
Get-ChildItem -Path HKCU:\Software -Recurse | Where-Object -FilterScript {($_.SubKeyCount -le 1) -and ($_.ValueCount -eq 4) }<o:p></o:p>
|
<o:p> </o:p>
复制项<o:p></o:p>
复制是使用 Copy-Item 进行的。以下命令将 HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion 及其所有属性复制到 HKCU:\,从而创建一个名为“CurrentVersion”的新项:
Copy-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion' -Destination hkcu:<o:p></o:p>
|
<o:p> </o:p>
如果在注册表编辑器中或使用 Get-ChildItem 检查此新项,您将注意到新位置中没有所包含子项的副本。为了复制容器的所有内容,需要指定 Recurse 参数。若要使前面的复制命令是递归的,请使用以下命令:
Copy-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion' -Destination hkcu:-Recurse<o:p></o:p>
|
<o:p> </o:p>
仍可以使用已经可用的其他工具执行文件系统复制。任何注册表编辑工具(包括 reg.exe、regini.exe 和 regedit.exe)和支持注册表编辑的 COM 对象(如 WScript.Shell 和 WMI 的 StdRegProv 类)都可以从 Windows PowerShell 内使用。
创建项<o:p></o:p>
在注册表中创建新项比在文件系统中创建新项简单。由于所有的注册表项都是容器,因此无需指定项类型;只需提供显式路径即可,例如:
New-Item -Path hkcu:\software\_DeleteMe<o:p></o:p>
|
<o:p> </o:p>
也可以使用基于提供程序的路径指定项:
New-Item -Path Registry::HKCU\_DeleteMe<o:p></o:p>
|
<o:p> </o:p>
删除项<o:p></o:p>
在本质上,删除项对于所有提供程序都是相同的。以下命令将以无提示方式删除项:
Remove-Item -Path hkcu:\Software\_DeleteMe<o:p></o:p>
Remove-Item -Path 'hkcu:\key with spaces in the name'<o:p></o:p>
|
<o:p> </o:p>
可以使用 Remove-Item 删除包含的项,但是如果该项包含任何其他内容,则会提示您确认删除。例如,如果尝试删除所创建的 HKCU:\CurrentVersion 子项,则会看到以下内容:
Remove-Item -Path hkcu:\CurrentVersion<o:p></o:p>
<o:p> </o:p>
确认<o:p></o:p>
HKCU:\CurrentVersion\AdminDebug 中的项具有子项,并且没有指定 -recurseparameter 参数。如果继续,所有子项均将随该项删除。是否确实要继续?<o:p></o:p>
[Y] 是 [A] 全是 [N] 否 [L] 全否 [S] 挂起 [?] 帮助<o:p></o:p>
(默认值为“Y”):<o:p></o:p>
|
<o:p> </o:p>
若要删除包含的项而不出现提示,请指定 -Recurse 参数:
Remove-Item -Path HKCU:\CurrentVersion -Recurse<o:p></o:p>
|
<o:p> </o:p>
若要删除 HKCU:\CurrentVersion 中的所有项但不删除 HKCU:\CurrentVersion 本身,则可以改用:
Remove-Item -Path HKCU:\CurrentVersion\* -Recurse<o:p></o:p>
|
<o:p> </o:p>
因为注册表条目是项的属性(因而无法直接浏览),所以在处理它们时需要采用稍微不同的方法。
可以使用许多不同的方法检查注册表条目。最简单的方法是获取与项关联的属性名称。例如,若要查看注册表项 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion 中条目的名称,请使用 Get-Item。注册表项具有一个通用名称为“Property”的属性,该属性是项中注册表条目的列表。以下命令选择 Property 属性,并扩展项以便在列表中显示它们:
PS> Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion | Select-Object -ExpandProperty Property<o:p></o:p>
DevicePath<o:p></o:p>
MediaPathUnexpanded<o:p></o:p>
ProgramFilesDir<o:p></o:p>
CommonFilesDir<o:p></o:p>
ProductId<o:p></o:p>
|
<o:p> </o:p>
若要以可读性更强的形式查看注册表条目,请使用 Get-ItemProperty:
PS> Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion<o:p></o:p>
<o:p> </o:p>
<o:p> </o:p>
PSPath :Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SO<o:p></o:p>
FTWARE\Microsoft\Windows\CurrentVersion<o:p></o:p>
PSParentPath :Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SO<o:p></o:p>
FTWARE\Microsoft\Windows<o:p></o:p>
PSChildName :CurrentVersion<o:p></o:p>
PSDrive :HKLM<o:p></o:p>
PSProvider :Microsoft.PowerShell.Core\Registry<o:p></o:p>
DevicePath :C:\WINDOWS\inf<o:p></o:p>
MediaPathUnexpanded :C:\WINDOWS\Media<o:p></o:p>
ProgramFilesDir :C:\Program Files<o:p></o:p>
CommonFilesDir :C:\Program Files\Common Files<o:p></o:p>
ProductId : 76487-338-1167776-22465<o:p></o:p>
WallPaperDir :C:\WINDOWS\Web\Wallpaper<o:p></o:p>
MediaPath :C:\WINDOWS\Media<o:p></o:p>
ProgramFilesPath :C:\Program Files<o:p></o:p>
PF_AccessoriesName :Accessories<o:p></o:p>
(default) :<o:p></o:p>
|
<o:p> </o:p>
项的 Windows PowerShell 相关属性均以“PS”为前缀,如 PSPath、PSParentPath、PSChildName 和 PSProvider。
可以使用“.”符号来表示当前位置。可以使用 Set-Location 首先转到 CurrentVersion 注册表容器:
Set-Location -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion<o:p></o:p>
|
<o:p> </o:p>
或者,可以将内置 HKLM PSDrive 与 Set-Location 一起使用:
Set-Location -Path hklm:\SOFTWARE\Microsoft\Windows\CurrentVersion<o:p></o:p>
|
<o:p> </o:p>
然后,可以使用“.”符号表示当前位置以列出属性,而不指定完整路径:
PS> Get-ItemProperty -Path .<o:p></o:p>
...<o:p></o:p>
DevicePath :C:\WINDOWS\inf<o:p></o:p>
MediaPathUnexpanded :C:\WINDOWS\Media<o:p></o:p>
ProgramFilesDir :C:\Program Files<o:p></o:p>
...<o:p></o:p>
|
<o:p> </o:p>
路径扩展名与它在文件系统中的使用方法相同,因此可以使用 Get-ItemProperty -Path ..\Help 从此位置获取 HKLM:\SOFTWARE\Microsoft\Windows\Help 的 ItemProperty 列表。
若要检索注册表项中的特定条目,请使用下列几种可能的方法之一。以下示例在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion 中查找 DevicePath 的值。
在使用 Get-ItemProperty 时,使用 Path 参数指定项的名称,并使用 Name 参数指定 DevicePath 条目的名称。
PS> Get-ItemProperty -Path HKLM:\Software\Microsoft\Windows\CurrentVersion -Name DevicePath<o:p></o:p>
<o:p> </o:p>
<o:p> </o:p>
PSPath :Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\<o:p></o:p>
Microsoft\Windows\CurrentVersion<o:p></o:p>
PSParentPath :Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\<o:p></o:p>
Microsoft\Windows<o:p></o:p>
PSChildName :CurrentVersion<o:p></o:p>
PSDrive :HKLM<o:p></o:p>
PSProvider :Microsoft.PowerShell.Core\Registry<o:p></o:p>
DevicePath :C:\WINDOWS\inf<o:p></o:p>
|
<o:p> </o:p>
此命令返回标准的 Windows PowerShell 属性以及 DevicePath 属性。
<!----><!----><!---->请注意: <o:p></o:p>
虽然 Get-ItemProperty 具有 Filter、Include 和 Exclude 参数,但是无法使用它们按属性名称进行筛选。这些参数引用注册表项(它们是项路径),而不是引用注册表条目(它们是项属性)。<o:p></o:p>
<o:p> </o:p>
另一种方法是使用 Reg.exe 命令行工具。若要获取 reg.exe 的帮助,请在命令提示符下键入 reg.exe /?。若要查找 DevicePath 条目,请使用 reg.exe,如以下命令所示:
PS> reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion /v DevicePath<o:p></o:p>
<o:p> </o:p>
! REG.EXE VERSION 3.0<o:p></o:p>
<o:p> </o:p>
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion<o:p></o:p>
DevicePath REG_EXPAND_SZ %SystemRoot%\inf<o:p></o:p>
|
<o:p> </o:p>
也可以使用 WshShell COM 对象查找一些注册表条目,尽管此方法不适用于大二进制数据或包括诸如“\”的字符的注册表条目名称。使用 \ 分隔符将属性名称追加到项路径:
PS> (New-Object -ComObject WScript.Shell).RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DevicePath")<o:p></o:p>
%SystemRoot%\inf<o:p></o:p>
|
<o:p> </o:p>
若要将名为“PowerShellPath”的新条目添加到 CurrentVersion 项,请将 New-ItemProperty 与项的路径、条目名称以及条目的值一起使用。在以下示例中,我们将采用 Windows PowerShell 变量 $PSHome 的值,该变量存储 Windows PowerShell 安装目录的路径。
使用以下命令可以将新条目添加到项,而且该命令还返回有关新条目的信息:
PS> New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion -Name PowerShellPath -PropertyType String -Value $PSHome<o:p></o:p>
<o:p> </o:p>
<o:p> </o:p>
PSPath :Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWAR<o:p></o:p>
E\Microsoft\Windows\CurrentVersion<o:p></o:p>
PSParentPath :Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWAR<o:p></o:p>
E\Microsoft\Windows<o:p></o:p>
PSChildName :CurrentVersion<o:p></o:p>
PSDrive :HKLM<o:p></o:p>
PSProvider :Microsoft.PowerShell.Core\Registry<o:p></o:p>
PowerShellPath :C:\Program Files\Windows PowerShell\v1.0<o:p></o:p>
|
<o:p> </o:p>
PropertyType 必须是下表中 Microsoft.Win32.RegistryValueKind 枚举成员的名称:
<o:p> </o:p>
PropertyType 值
|
含义
|
Binary<o:p></o:p>
|
二进制数据
|
DWord<o:p></o:p>
|
一个有效的 UInt32 数字
|
ExpandString<o:p></o:p>
|
一个可以包含动态扩展的环境变量的字符串
|
MultiString<o:p></o:p>
|
多行字符串
|
String
|
|
分享到:
相关推荐
◆Windows PowerShell 并不处理文本,而是处理以.NET平台为基础的对象; ◆Windows PowerShell 附带了数量庞大的内置命令集和一致的接口; ◆对于各个工具,全部的外壳程序命令都使用相同的命令剖析器,而非使用...
powershell学习教程,powershell学习教程powershell学习教程powershell学习教程powershell学习教程powershell学习教程powershell学习教程
--|PowerShell基础教程 --|WindowsPowerShelluserGuide |powershell 中文教程 --|Windows PowerShell 入门指南.pdf --|Windows PowerShell 入门.pdf --|Windows PowerShell 语言快速参考.rtf |Manning.Windows....
Powershell 实例教程 Powershell 实例教程Powershell 实例教程
PowerShell基础教程,需要的请下载
下面的例子里, PowerShell修改了注册表键值, 完成了Security loop disable, 和loopbackcheck disable. 代码如下: #Security loop disable so that you can look at it on the same machine if(($gchn = Get-Item...
◆Windows PowerShell 并不处理文本,而是处理以.NET平台为基础的对象; ◆Windows PowerShell 附带了数量庞大的内置命令集和一致的接口; ◆对于各个工具,全部的外壳程序命令都使用相同的命令剖析器,而非使用...
主要介绍了在PowerShell中使用递归查找获取注册表路径的小技巧,有需要的朋友可以参考下
5.3.23 show offload——查看任务 2415.3.24 delete arpcache——删除ARP缓存 241 5.3.25 从命令提示符运行netsh命令 241 5.3.26 从netsh.exe命令提示符运行netsh 243 第6章 网络服务管理 249 6.1 网络服务 249 ...
Win7PowerShell使用教程,学习这个脚本还是有好处的,看看吧
5.3.23 show offload——查看任务 2415.3.24 delete arpcache——删除ARP缓存 241 5.3.25 从命令提示符运行netsh命令 241 5.3.26 从netsh.exe命令提示符运行netsh 243 第6章 网络服务管理 249 6.1 网络服务 249 ...
Powershell管理系列教程,Powershell 操作AD Powershell 管理域帐号
非常好用的Powershell教程,共享给大家
5.3.23 show offload——查看任务 2415.3.24 delete arpcache——删除ARP缓存 241 5.3.25 从命令提示符运行netsh命令 241 5.3.26 从netsh.exe命令提示符运行netsh 243 第6章 网络服务管理 249 6.1 网络服务 249 ...
5.3.23 show offload——查看任务 2415.3.24 delete arpcache——删除ARP缓存 241 5.3.25 从命令提示符运行netsh命令 241 5.3.26 从netsh.exe命令提示符运行netsh 243 第6章 网络服务管理 249 6.1 网络服务 249 ...
5.3.23 show offload——查看任务 2415.3.24 delete arpcache——删除ARP缓存 241 5.3.25 从命令提示符运行netsh命令 241 5.3.26 从netsh.exe命令提示符运行netsh 243 第6章 网络服务管理 249 6.1 网络服务 249 ...
powershell可以提高工作效率,用于服务器管理,浅显易懂。
Windows PowerShell 是专为系统管理员设计的新 Windows 命令行外壳程序。该外壳程序包括交互式提示和脚本环境,两者既可以独立使用也可以组合使用。 现在win2008,win7都集成了PowerShell,系统不带PowerShell可以...
经典PowerShell入门教程.docx