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
|
|
分享到:
相关推荐
PowerShell的基础教程主要涵盖了它与传统外壳程序的区别、Cmdlet的使用、全新的脚本语言特性和与Windows命令及实用工具的集成。 1. **处理方式的不同**: PowerShell 不像传统的Cmd.exe或其他Unix外壳程序那样处理...
--|PowerShell基础教程 --|WindowsPowerShelluserGuide |powershell 中文教程 --|Windows PowerShell 入门指南.pdf --|Windows PowerShell 入门.pdf --|Windows PowerShell 语言快速参考.rtf |Manning.Windows....
【PowerShell基础教程】 PowerShell是一种专为管理和自动化Windows操作系统设计的强大脚本语言,自Windows XP/Server 2003起,它逐渐成为Vista、Server 2008及后续版本的标准组件。PowerShell旨在提升系统管理员的...
【PowerShell基础教程】 PowerShell是一种强大的脚本语言和命令行shell,主要应用于Windows操作系统,如XP、Server 2003、Vista和Server 2008。不同于传统的外壳程序(如Cmd.exe、SH、KSH、CSH和BASH),PowerShell...
4. **提供者**: PowerShell支持多种提供者,如文件系统提供者(允许对文件和目录进行操作)和注册表提供者(允许访问注册表键和值)。 **PowerShell进阶** 1. **脚本编写**: PowerShell支持使用PowerShell语言编写...
传统外壳程序如Cmd.exe、SH、KSH、CSH和BASH通常以文本格式处理命令输出,而PowerShell则处理基于.NET平台的对象,这使得数据处理更为灵活和强大。 PowerShell的核心概念之一是Cmdlet(发音为“command-let”),...
本文介绍了一个简单而实用的PowerShell小技巧——如何在PowerShell中使用递归的方式查找获取注册表路径。通过这个技巧,用户可以更方便地管理和维护系统注册表,从而提高工作效率。无论是日常的故障排查还是系统的...
例如,可以像操作文件夹和文件一样操作Windows注册表项。 4. **使用PowerShell远程管理和作业(Remoting and Jobs)**: - 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...
### PowerShell 教程详解 #### 一、PowerShell 概述与重要性 PowerShell 是一个强大的命令行脚本环境,由微软开发并提供支持,主要用于 Windows 系统的管理和自动化任务处理。自 Exchange Server 2007 和 System ...
### Windows PowerShell 实用教程 #### Windows PowerShell 概览 Windows PowerShell 是由微软开发的一款强大的交互式命令行界面和脚本语言环境,专为系统管理和自动化设计。它首次出现在 Windows XP 和 Windows ...
监控局域网内:共享打印机 获取打印记录、打印人员、打印文件等详细信息。导出为excel表格
1. **PowerShell基础知识** PowerShell基于.NET Framework,提供了比传统的Cmd.exe更丰富的对象模型和命令集。在PowerShell中,每个命令(称为cmdlet)都有一个固定的参数模式,遵循统一的命名规则,如`Get-Item`, ...
Windows PowerShell 是专为系统管理员设计的新 Windows 命令行外壳程序。该外壳程序包括交互式提示和脚本环境,两者既可以独立使用也可以组合使用。 现在win2008,win7都集成了PowerShell,系统不带PowerShell可以...
PowerShell 是一个强大的命令行脚本环境,专为Windows操作系统设计,用于系统管理和应用程序自动化。它不仅扩展了传统的命令提示符(cmd.exe),而且从根本上改变了交互式管理的方式。PowerShell 基于.NET框架,因此...
PowerShell 3.0进阶教程中提到的服务器管理主要围绕以下几个方面: 1. 启用多服务器管理:在Windows Server 2012中,管理员可以启用远程管理功能,从而可以在本地或远程管理服务器。启用远程管理的基本步骤包括打开...
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使用教程,学习这个脚本还是有好处的,看看吧