about_Registry_Provider

提供程序名称

注册表

驱动器

HKLM:, HKCU:

功能

ShouldProcessUseTransactions

简短说明

提供对 PowerShell 中的注册表项、条目和值的访问权限。

详细说明

此信息仅适用于在 Windows 上运行的 PowerShell。

通过 PowerShell Registry 提供程序,你可以获取、添加、更改、清除和删除 PowerShell 中的注册表项、条目和值。

Registry 驱动器是计算机上包含注册表项和子项的分层命名空间。 注册表项和值不是该层次结构的组件。 相反,它们是每个键的属性。

注册表提供程序支持以下 cmdlet:

此提供程序公开的类型

注册表提供程序在以下两种类型之一中返回注册表数据:

Registry 提供程序将其数据存储公开为两个默认驱动器。

  • HKLM: 映射到 HKEY_LOCAL_MACHINE 注册表配置单元
  • HKCU: 映射到 HKEY_CURRENT_USER 注册表配置单元

若要使用注册表,可以使用以下命令将位置更改为 HKLM: 驱动器。

Set-Location HKLM:

若要返回到文件系统驱动器,请键入驱动器名称。 例如,键入:

Set-Location C:

还可以从任何其他 PowerShell驱动器使用 Registry 提供程序。 若要从其他位置引用注册表项,请在路径中使用驱动器名称 (HKLM:, HKCU:)。 使用反斜杠 (\) 或正斜杠 (/) 指示 Registry 驱动器的级别。

PS C:\> cd HKLM:\Software

注意

PowerShell 使用别名来让你熟悉如何使用提供程序路径。 Get-ChildItem 的别名等dirls命令是 Set-Location 的别名pwd是 Get-Location别名。cd

上一个示例显示了可用于导航 Registry 提供程序的另一个路径语法。 此语法使用提供程序名称,后跟两个冒号 ::。 此语法允许你使用完整的 HIVE 名称,而不是映射的驱动器名称 HKLM

cd "Registry::HKEY_LOCAL_MACHINE\Software"

显示注册表项的内容

注册表分为键、子键和条目。 有关注册表结构的详细信息,请参阅注册表结构

Registry 驱动器中,每个键都是容器。 一个键可以包含任意数量的键。 具有父键的注册表项称为子项。 可以使用 Get-ChildItem 查看注册表项和 Set-Location 以导航到键路径。

注册表值是注册表项的属性。 在注册表驱动器中,它们称为“项属性”。 注册表项可以同时具有子键和项属性。

此示例中显示 Get-ItemGet-ChildItem 之间的差异。 在“假脱机程序”注册表项上使用 Get-Item 时,可以查看其属性。

Get-Item -Path HKLM:\SYSTEM\CurrentControlSet\Services\Spooler
    Hive: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services


Name        Property
----        --------
Spooler     DependOnService    : {RPCSS, http}
            Description        : @%systemroot%\system32\spoolsv.exe,-2
            DisplayName        : @%systemroot%\system32\spoolsv.exe,-1
            ErrorControl       : 1
            FailureActions     : {16, 14, 0, 0...}
            Group              : SpoolerGroup
            ImagePath          : C:\WINDOWS\System32\spoolsv.exe
            ObjectName         : LocalSystem
            RequiredPrivileges : {SeTcbPrivilege, SeImpersonatePrivilege, ...
            ServiceSidType     : 1
            Start              : 2
            Type               : 27

每个注册表项还可以有子项。 Get-Item在注册表项上使用时,不会显示子项。 该 Get-ChildItem cmdlet 显示“后台处理程序”键的子项,包括每个子项的属性。 使用 Get-ChildItem时不显示父键属性。

Get-ChildItem -Path HKLM:\SYSTEM\CurrentControlSet\Services\Spooler
    Hive: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Spooler


Name             Property
----             --------
Performance      Close           : PerfClose
                 Collect         : PerfCollect
                 Collect Timeout : 2000
                 Library         : C:\Windows\System32\winspool.drv
                 Object List     : 1450
                 Open            : PerfOpen
                 Open Timeout    : 4000
Security         Security : {1, 0, 20, 128...}

Get-Item cmdlet 也可以在当前位置使用。 以下示例导航到“假脱机程序”注册表项并获取项属性。 点 . 用于指示当前位置。

cd HKLM:\System\CurrentControlSet\Services\Spooler
Get-Item .
    Hive: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services

Name             Property
----             --------
Spooler          DependOnService    : {RPCSS, http}
                 Description        : @%systemroot%\system32\spoolsv.exe,-2
...

有关本节中所述 cmdlet 的详细信息,请参阅以下文章。

-Get-Item -Get-ChildItem

查看注册表项值

注册表项值存储为每个注册表项的属性。 Get-ItemProperty cmdlet 使用指定的名称查看注册表项属性。 结果是包含指定的属性的 PSCustomObject

以下示例使用 Get-ItemProperty cmdlet 查看所有属性。 在变量中存储生成的对象,可让你访问所需的属性值。

$p = Get-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\Spooler
$p.DependOnService
RPCSS
http

-Name 参数指定值会选择你指定的属性,并返回 PSCustomObject。 以下示例显示在使用 -Name 参数时的输出差异。

Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Wbem
BUILD                      : 17134.1
Installation Directory     : C:\WINDOWS\system32\WBEM
MOF Self-Install Directory : C:\WINDOWS\system32\WBEM\MOF
PSPath                     : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wbem
PSParentPath               : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
PSChildName                : Wbem
PSDrive                    : HKLM
PSProvider                 : Microsoft.PowerShell.Core\Registry
Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Wbem -Name BUILD
BUILD        : 17134.1
PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wbem
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
PSChildName  : Wbem
PSDrive      : HKLM
PSProvider   : Microsoft.PowerShell.Core\Registry

从 PowerShell 5.0 开始,Get-ItemPropertyValue cmdlet 仅返回你指定的属性值。

Get-ItemPropertyValue -Path HKLM:\SOFTWARE\Microsoft\Wbem -Name BUILD
17134.1

有关本节中所用 cmdlet 的详细信息,请参阅以下文章。

更改注册表项值

Set-ItemProperty cmdlet 设置与注册表项关联的注册表值。 以下示例使用 Set-ItemProperty 将假脱机程序服务启动类型更改为手动。 该示例将 StartType 更改回 Automatic 使用 Set-Service cmdlet。

Get-Service spooler | Select-Object Name, StartMode
Name    StartType
----    ---------
spooler Automatic
$path = "HKLM:\SYSTEM\CurrentControlSet\Services\Spooler\"
Set-ItemProperty -Path $path -Name Start -Value 3
Get-Service spooler | Select-Object Name, StartMode
Name    StartType
----    ---------
spooler    Manual
Set-Service -Name Spooler -StartupType Automatic

每个注册表项都有一个默认值。 可以使用或 Set-Item Set-ItemProperty. 更改default注册表项的值。

Set-ItemProperty -Path HKLM:\SOFTWARE\Contoso -Name "(default)" -Value "one"
Set-Item -Path HKLM:\SOFTWARE\Contoso -Value "two"

有关本节中所用 cmdlet 的详细信息,请参阅以下文章。

创建注册表项和值

New-Item cmdlet 使用你提供的名称创建新的注册表项。 你也可以使用 mkdir 函数,该函数会在内部调用 New-Item cmdlet。

mkdir ContosoCompany
    Hive: HKEY_LOCAL_MACHINE\SOFTWARE

Name                           Property
----                           --------
ContosoCompany

可以使用 New-ItemProperty cmdlet 在你指定的注册表项中创建值。 以下示例在 ContosoCompany 注册表项上创建新的 DWORD 值。

$path = "HKLM:\SOFTWARE\ContosoCompany"
New-ItemProperty -Path $path -Name Test -Type DWORD -Value 1

注意

有关其他允许的类型值,请查看本文中的动态参数部分。

有关详细的 cmdlet 用法,请参阅 New-ItemProperty

复制注册表项和值

Registry 提供程序中,使用 Copy-Item cmdlet 复制注册表项和值。 使用 Copy-ItemProperty cmdlet 仅复制注册表值。 以下命令将“Contoso”注册表项及其属性复制到指定位置 HKLM:\Software\Fabrikam

Copy-Item 如果目标键不存在,则创建目标键。 如果目标键存在,Copy-Item 会创建源键的副本作为目标键的子项。

Copy-Item -Path  HKLM:\Software\Contoso -Destination HKLM:\Software\Fabrikam

以下命令使用 Copy-ItemProperty cmdlet 将“Server”值从“Contoso”键复制到“Fabrikam”键。

$source = "HKLM:\SOFTWARE\Contoso"
$dest = "HKLM:\SOFTWARE\Fabrikam"
Copy-ItemProperty -Path $source -Destination $dest -Name Server

有关本节中所用 cmdlet 的详细信息,请参阅以下文章。

移动注册表项和值

Move-ItemMove-ItemProperty cmdlet 的行为类似于其“复制”对应项。 如果目标存在,Move-Item 会将源键移到目标键下方。 如果目标密钥不存在,则源密钥将移动到目标路径。

以下命令将“Contoso”键移动到路径 HKLM:\SOFTWARE\Fabrikam

Move-Item -Path HKLM:\SOFTWARE\Contoso -Destination HKLM:\SOFTWARE\Fabrikam

此命令将所有属性从 HKLM:\SOFTWARE\ContosoCompany 此移动到 HKLM:\SOFTWARE\Fabrikam

$source = "HKLM:\SOFTWARE\Contoso"
$dest = "HKLM:\SOFTWARE\Fabrikam"
Move-ItemProperty -Path $source -Destination $dest -Name *

有关本节中所用 cmdlet 的详细信息,请参阅以下文章。

重命名注册表项和值

可以像重命名文件和文件夹一样重命名注册表项和值。 Rename-Item 重命名注册表项,而 Rename-ItemProperty 重命名注册表值。

$path = "HKLM:\SOFTWARE\Contoso"
Rename-ItemProperty -Path $path -Name ContosoTest -NewName FabrikamTest
Rename-Item -Path $path -NewName Fabrikam

更改安全描述符

可以使用 Get-AclSet-Acl cmdlet 限制对注册表项的访问。 以下示例将具有完全控制权的新用户添加到 HKLM:\SOFTWARE\Contoso 注册表项。

$acl = Get-Acl -Path HKLM:\SOFTWARE\Contoso
$rule = New-Object System.Security.AccessControl.RegistryAccessRule `
("CONTOSO\jsmith", "FullControl", "Allow")
$acl.SetAccessRule($rule)
$acl | Set-Acl -Path HKLM:\SOFTWARE\Contoso

有关更多示例和 cmdlet 用法的详细信息,请参阅以下文章。

删除和清除注册表项和值

可以使用 . 删除包含的项 Remove-Item。 如果项目包含其他任何内容,系统会提示确认删除。 以下示例尝试删除键 HKLM:\SOFTWARE\Contoso

dir HKLM:\SOFTWARE\Contoso\
    Hive: HKEY_LOCAL_MACHINE\SOFTWARE\Contoso

Name                           Property
----                           --------
ChildKey
Remove-Item -Path HKLM:\SOFTWARE\Contoso
Confirm
The item at HKLM:\SOFTWARE\Contoso has children and the -Recurse
parameter wasn't specified. If you continue, all children will be removed
with the item. Are you sure you want to continue?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help
(default is "Y"):

若要在无提示时删除包含的项,请指定 -Recurse 参数。

Remove-Item -Path HKLM:\SOFTWARE\Contoso -Recurse

如果要删除 HKLM:\SOFTWARE\Contoso 中的所有项,但不删除 HKLM:\SOFTWARE\Contoso 本身,请使用尾随反斜杠 \ 后跟通配符。

Remove-Item -Path HKLM:\SOFTWARE\Contoso\* -Recurse

此命令会从 HKLM:\SOFTWARE\Contoso 注册表项中删除“ContosoTest”注册表值。

Remove-ItemProperty -Path HKLM:\SOFTWARE\Contoso -Name ContosoTest

Clear-Item 会清除键的所有注册表值。 以下示例清除 HKLM:\SOFTWARE\Contoso 注册表项中的所有值。 若要仅清除特定属性,请使用 Clear-ItemProperty

Get-Item .\Contoso\
    Hive: HKEY_LOCAL_MACHINE\SOFTWARE

Name           Property
----           --------
Contoso        Server     : {a, b, c}
               HereString : {This is text which contains
               newlines. It also contains "quoted" strings}
               (default)  : 1
Clear-Item .\Contoso\
Get-Item .\Contoso\
    Hive: HKEY_LOCAL_MACHINE\SOFTWARE

Name                           Property
----                           --------
Contoso

有关更多示例和 cmdlet 用法的详细信息,请参阅以下文章。

动态参数

动态参数是由 PowerShell 提供程序添加的 cmdlet 参数,且只可用于在启用了提供程序的驱动器中使用 cmdlet 的情况。

键入 <Microsoft.Win32.RegistryValueKind>

建立或更改注册表值的数据类型。 默认值为 String (REG_SZ)。

此参数可用于 Set-ItemProperty cmdlet。 它还可用于注册表驱动器中的 Set-Item cmdlet,但它不起作用。

  • String - 用于REG_SZ值。 将 [System.String] 对象传递给 Value 参数。
  • ExpandString - 用于REG_EXPAND_SZ值。 将 [System.String] 对象传递给 Value 参数。 字符串应包含对检索值时展开的环境变量的未扩展引用。
  • Binary - 用于REG_BINARY值。 将 [System.Byte[]] 对象传递给 Value 参数。
  • DWord - 用于REG_DWORD值。 将 [System.Int32] 对象传递给 Value 参数。
  • MultiString - 用于REG_MULTI_SZ值。 将 [System.String[]] 对象传递给 Value 参数。
  • QWord - 用于REG_QWORD值。 将 [System.Int64] 对象传递给 Value 参数。
  • Unknown - 指示不受支持的注册表数据类型,例如REG_RESOURCE_LIST值。

使用管道

提供程序 cmdlet 接受管道输入。 可以使用管道将提供程序数据从一个 cmdlet 发送到另一个提供程序 cmdlet 来简化任务。 若要详细了解如何将管道与提供程序 cmdlet 配合使用,请参阅本文中提供的 cmdlet 参考。

获取帮助

从 Windows PowerShell 3.0 开始,你可以获取有关提供程序 cmdlet 的自定义帮助主题,它们介绍了这些 cmdlet 在文件系统驱动器中的行为方式。

若要获取针对文件系统驱动器进行自定义的帮助主题,请在文件系统驱动器中运行 Get-Help 命令,或使用 Path 参数来指定文件系统驱动器。

Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path HKLM:

另请参阅