about_Registry_Provider

提供程序名称

注册表

驱动器

%>

功能

ShouldProcessUseTransactions

简短说明

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

详细说明

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

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

Registry 驱动器是计算机上包含注册表项和子项的分层命名空间。 注册表条目和注册表值不是该层次结构的组成部分。 而是每个注册表项的属性。

Registry 提供程序支持以下 cmdlet,本文会进行介绍。

此提供程序公开的类型

注册表项表示为 Microsoft.Win32.RegistryKey 类的实例。 注册表条目表示为 PSCustomObject 类的实例。

Registry 提供程序将其数据存储公开为两个默认驱动器。 注册表位置 HKEY_LOCAL_MACHINE 映射到 HKLM: 驱动器,HKEY_CURRENT_USER 映射到 HKCU: 驱动器。 若要使用注册表,可以使用以下命令将位置更改为 HKLM: 驱动器。

Set-Location HKLM:

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

Set-Location C:

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

PS C:\> cd HKLM:\Software

注意

PowerShell 使用别名来让你熟悉如何使用提供程序路径。 dirls 等命令现在是 Get-ChildItem 的别名,cdSet-Location 的别名,pwdGet-Location 的别名。

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

cd "Registry::HKEY_LOCAL_MACHINE\Software"

显示注册表项的内容

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

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

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

此示例中显示 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 将假脱机程序服务启动类型更改为手动。 示例使用 Set-Service cmdlet 将 StartType 更改回自动

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-ItemSet-ItemProperty 更改注册表项的默认值。

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 was not 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 指定以 null 结尾的字符串。 用于 REG_SZ 值。
ExpandString 指定以 null 结尾的字符串,
其中包含对检索值时展开的环境变量的
未展开引用。 用于 REG_EXPAND_SZ 值。
Binary 指定采用任意格式的二进制数据。 用于 REG_BINARY 值。
DWord 指定一个 32 位的二进制数字。 用于 REG_DWORD 值。
MultiString 指定以两个 null 字符结尾的
字符串的数组。 用于 REG_MULTI_SZ 值。
QWord 指定一个 64 位的二进制数字。 用于 REG_QWORD 值。
Unknown 指示不受支持的注册表数据类型,例如
REG_RESOURCE_LIST 值。

支持的 cmdlet

使用管道

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

获取帮助

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

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

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

另请参阅