代码之家  ›  专栏  ›  技术社区  ›  rfgamaral

不允许获取ChildItem和注册表项访问

  •  3
  • rfgamaral  · 技术社区  · 16 年前

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

    有很多键只是数字(我想要的),但是有一个名为“Properties”的键我没有访问权限(我不需要),这个键在执行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
    

    如何排除“Properties”键并消除该错误?

    1 回复  |  直到 16 年前
        1
  •  5
  •   Keith Hill    16 年前

    如果你只是不想“看到”错误,那么使用 -ErrorAction 获取子项时,例如:

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

    这个 SilentlyContinue 值告诉PowerShell不要显示此非终止错误。如果要让PowerShell实际显示此项的值,则必须调整注册表项上的perms。