about_Registry_Provider

提供程序名称

注册表

驱动器

%>

功能

ShouldProcessUseTransactions

简短说明

提供对 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:

另请参阅