`

PowerShell基础教程(24)——处理注册表项

阅读更多

PowerShell基础教程(24)——处理注册表项             <o:p></o:p>

由于注册表项是 Windows PowerShell 驱动器上的项因此处理它们的方式与处理文件和文件夹非常类似。一个关键差异是,基于注册表的 Windows PowerShell 驱动器上的每个项都是一个容器,就像文件系统驱动器上的文件夹一样。但是,注册表条目及其关联值是项的属性,而不是不同的项。

列出注册表项的所有子项<o:p></o:p>

使用 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 可以通过其 PathFilterInclude 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.exeregini.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>

删除特定项下的所有项<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>

处理注册表条目             <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为前缀 PSPathPSParentPathPSChildName 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 列表。

获取单个注册表条目<o:p></o:p>

若要检索注册表项中的特定条目请使用下列几种可能的方法之一。以下示例在 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 具有 FilterInclude 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>

创建新的注册表条目<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基础教程.doc

    PowerShell的基础教程主要涵盖了它与传统外壳程序的区别、Cmdlet的使用、全新的脚本语言特性和与Windows命令及实用工具的集成。 1. **处理方式的不同**: PowerShell 不像传统的Cmd.exe或其他Unix外壳程序那样处理...

    Windows PowerShell教程合集

    --|PowerShell基础教程 --|WindowsPowerShelluserGuide |powershell 中文教程 --|Windows PowerShell 入门指南.pdf --|Windows PowerShell 入门.pdf --|Windows PowerShell 语言快速参考.rtf |Manning.Windows....

    PowerShell基础教程

    【PowerShell基础教程】 PowerShell是一种专为管理和自动化Windows操作系统设计的强大脚本语言,自Windows XP/Server 2003起,它逐渐成为Vista、Server 2008及后续版本的标准组件。PowerShell旨在提升系统管理员的...

    PowerShell 基础教程

    【PowerShell基础教程】 PowerShell是一种强大的脚本语言和命令行shell,主要应用于Windows操作系统,如XP、Server 2003、Vista和Server 2008。不同于传统的外壳程序(如Cmd.exe、SH、KSH、CSH和BASH),PowerShell...

    PowerShell教程

    4. **提供者**: PowerShell支持多种提供者,如文件系统提供者(允许对文件和目录进行操作)和注册表提供者(允许访问注册表键和值)。 **PowerShell进阶** 1. **脚本编写**: PowerShell支持使用PowerShell语言编写...

    经典PowerShell入门教程.docx

    传统外壳程序如Cmd.exe、SH、KSH、CSH和BASH通常以文本格式处理命令输出,而PowerShell则处理基于.NET平台的对象,这使得数据处理更为灵活和强大。 PowerShell的核心概念之一是Cmdlet(发音为“command-let”),...

    PowerShell小技巧之查找获取注册表路径

    本文介绍了一个简单而实用的PowerShell小技巧——如何在PowerShell中使用递归的方式查找获取注册表路径。通过这个技巧,用户可以更方便地管理和维护系统注册表,从而提高工作效率。无论是日常的故障排查还是系统的...

    powershell3.0经典教程

    例如,可以像操作文件夹和文件一样操作Windows注册表项。 4. **使用PowerShell远程管理和作业(Remoting and Jobs)**: - 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...

    powershell教程

    ### PowerShell 教程详解 #### 一、PowerShell 概述与重要性 PowerShell 是一个强大的命令行脚本环境,由微软开发并提供支持,主要用于 Windows 系统的管理和自动化任务处理。自 Exchange Server 2007 和 System ...

    Windows PowerShell 实用教程

    ### Windows PowerShell 实用教程 #### Windows PowerShell 概览 Windows PowerShell 是由微软开发的一款强大的交互式命令行界面和脚本语言环境,专为系统管理和自动化设计。它首次出现在 Windows XP 和 Windows ...

    监控局域网内 共享打印机powershell脚本

    监控局域网内:共享打印机 获取打印记录、打印人员、打印文件等详细信息。导出为excel表格

    powershell中英文教程

    1. **PowerShell基础知识** PowerShell基于.NET Framework,提供了比传统的Cmd.exe更丰富的对象模型和命令集。在PowerShell中,每个命令(称为cmdlet)都有一个固定的参数模式,遵循统一的命名规则,如`Get-Item`, ...

    精通windows server 2008 命令行与powershell 电子书PDF单文件完整版

    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 实例教程

    PowerShell 是一个强大的命令行脚本环境,专为Windows操作系统设计,用于系统管理和应用程序自动化。它不仅扩展了传统的命令提示符(cmd.exe),而且从根本上改变了交互式管理的方式。PowerShell 基于.NET框架,因此...

    powershell 教程

    PowerShell 3.0进阶教程中提到的服务器管理主要围绕以下几个方面: 1. 启用多服务器管理:在Windows Server 2012中,管理员可以启用远程管理功能,从而可以在本地或远程管理服务器。启用远程管理的基本步骤包括打开...

    Win7PowerShell使用教程

    Win7PowerShell使用教程,学习这个脚本还是有好处的,看看吧

Global site tag (gtag.js) - Google Analytics