about_Registry_Provider
提供程序名称
注册表
驱动器
HKLM:
, HKCU:
功能
ShouldProcess、UseTransactions
简短说明
提供对 PowerShell 中的注册表项、条目和值的访问权限。
详细说明
此信息仅适用于在 Windows 上运行的 PowerShell。
通过 PowerShell Registry 提供程序,你可以获取、添加、更改、清除和删除 PowerShell 中的注册表项、条目和值。
Registry 驱动器是计算机上包含注册表项和子项的分层命名空间。 注册表项和值不是该层次结构的组件。 相反,它们是每个键的属性。
注册表提供程序支持以下 cmdlet:
- Get-Location
- Set-Location
- Get-Item
- Get-ChildItem
- Invoke-Item
- Move-Item
- New-Item
- Remove-Item
- Clear-ItemProperty
- Get-ItemProperty
- New-ItemProperty
- Remove-ItemProperty
- Set-ItemProperty
- Get-Acl
- Set-Acl
此提供程序公开的类型
注册表提供程序在以下两种类型之一中返回注册表数据:
导航 Registry 驱动器
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
上一个示例显示了可用于导航 Registry 提供程序的另一个路径语法。 此语法使用提供程序名称,后跟两个冒号 ::
。 此语法允许你使用完整的 HIVE 名称,而不是映射的驱动器名称 HKLM
。
cd "Registry::HKEY_LOCAL_MACHINE\Software"
显示注册表项的内容
注册表分为键、子键和条目。 有关注册表结构的详细信息,请参阅注册表结构。
在 Registry 驱动器中,每个键都是容器。 一个键可以包含任意数量的键。 具有父键的注册表项称为子项。 可以使用 Get-ChildItem
查看注册表项和 Set-Location
以导航到键路径。
注册表值是注册表项的属性。 在注册表驱动器中,它们称为“项属性”。 注册表项可以同时具有子键和项属性。
此示例中显示 Get-Item
与 Get-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-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
每个注册表项都有一个默认值。 可以使用或 default
Set-Item
. 更改Set-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-Item
和 Move-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-Acl
和 Set-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: