不允许Get-ChildItem和注册表密钥访问

Ric*_*ral 3 windows registry powershell

我正在尝试使用一个简单的PowerShell脚本来访问注册表,我这样做:

Foreach ($key in Get-Childitem HKLM:\SYSTEM\CurrentControlSet\Control\Class\"{4D36E972-E325-11CE-BFC1-08002BE10318}") {
    $key.name
}
Run Code Online (Sandbox Code Playgroud)

有一堆键只是数字(我想要的那些),但是有一个名为"属性",我没有访问权限(我不需要),并且该键给我执行Foreach时出现以下错误命令:

Foreach ($key in Get-Childitem HKLM:\SYSTEM\CurrentControlSet\Control\Class\"{4D36E972-E325-11CE-BFC1-08002BE10318}") {
    $key.name
}
Get-ChildItem : Requested registry access is not allowed.
At line:3 char:31
+ Foreach ($key in Get-Childitem <<<<  HKLM:\SYSTEM\CurrentControlSet\Control\Class\"{4D36E972-E325-11CE-BFC1-08002BE10318}") {
    + CategoryInfo          : PermissionDenied: (HKEY_LOCAL_MACH...318}\Properties:String) [Get-ChildItem], SecurityException
    + FullyQualifiedErrorId : System.Security.SecurityException,Microsoft.PowerShell.Commands.GetChildItemCommand

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\0000
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\0001
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\0002
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\0003
(...)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\0024
Run Code Online (Sandbox Code Playgroud)

如何排除"属性"键并消除该错误?

Kei*_*ill 5

如果你只是不想"看到"错误,那么使用-ErrorActionon Get-ChildItem,例如:

$path = "HKLM:\SYSTEM\CurrentControlSet\Control\Class\" +
        "{4D36E972-E325-11CE-BFC1-08002BE10318}"
Get-Childitem $path -ErrorAction SilentlyContinue | Foreach {$_.Name}
Run Code Online (Sandbox Code Playgroud)

SilentlyContinue值告诉PowerShell不要显示此非终止错误.如果您希望PowerShell实际显示此密钥的值,则必须调整注册表项上的perms.

  • 我认为`-Exclude`将无法工作,因为Get-ChildItem可能首先尝试读取路径规范,然后从cmdlet的输出中排除匹配项(到那时已经发生了UnauthorizedAccessException). (2认同)