如何通过Get-Childitem捕获非终止错误,但仍然捕获返回的数据?

问题描述 投票:0回答:1
以下代码工作(即从注册表中返回预期数据),但是由于缺乏目标密钥的一个子键的权限,它会引起非终止错误,这对此用例很良性。

$adapterKeys = $null $adapterKeys = Get-ChildItem "HKLM:\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}" $adapters = $null $adapters = $adapterKeys | Get-ItemProperty $adapters | Select -First 1

当指定一个终止错误时,没有返回数据:

-ErrorAction "Stop"

因此,我可以用

$adapterKeys = $null $adapterKeys = Get-ChildItem "HKLM:\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}" -ErrorAction "Stop" $adapters = $null $adapters = $adapterKeys | Get-ItemProperty $adapters | Select -First 1
ErrorAction "Stop"

抓住错误,但是由于数据不再返回,这会破坏目的。

因此,使用这些约束,我如何返回必要的数据,但也忽略了错误?请注意,我不想忽略所有错误,否则我只会使用
try{} catch{}

-ErrorAction "SilentlyContinue"

和/或

Get-ChildItem
的预期行为吗?我不记得以前遇到过这样的问题。 for参考,丢弃的错误是:

-ErrorAction "Stop"

这是由于目标注册表密钥的第键被许可,因此即使是本地管理员也无法访问。如前所述,这对于此用例是无关紧要的,因为我不需要此
Get-ChildItem : Requested registry access is not allowed. At line:2 char:16 + … apterKeys = Get-ChildItem "HKLM:\SYSTEM\CurrentControlSet\Control\Cla … + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : PermissionDenied: (HKEY_LOCAL_MACHINE\…BE10318}\Properties:String) [Get-ChildItem], SecurityException + FullyQualifiedErrorId : System.Security.SecurityException,Microsoft.PowerShell.Commands.GetChildItemCommand
子钥匙的数据。仅来自其他子钥匙。
一个解决方法是直接在所有目标子键上使用

Properties

,因此绝不会遇到

Properties
键或这个特定错误。但是,我不知道会有多少个子钥匙,尽管它们可能总是有一个一致的数字命名惯例,但我想避免做出这些假设。此外,这个问题更多地是关于我对
Get-ItemProperty

和/或终止错误的行为的误解。

Edit:我遇到的一些相关问题和信息:

这个问题建议使用

Properties

Get-ChildItem
用于后处理错误,但是这对我来说并没有很多意义。
这个问题表明,尽管我怀疑这不适用,但“半终止”错误类型的文献不佳。还讨论了我从未听说过的关键字,也没有使用过。
Fwiw,我的目标环境是Windows Powershell 5.1,尽管我在Powershell 7+上也有同样的问题,并且在Win11和Win11的最新版本上也有同样的问题。

  • -ErrorAction "SilentlyContinue"和/或-ErrorVariable
    的这种预期行为
    YES:
  • trap
  • 通过设计提出了一个the the tir-script-terminative(runspace-ensination)误差后,遇到non-termination
    错误,因此implirical proply the命令是该命令是一部分的一部分,导致无输出。
    
  • 这个问题建议使用
Get-ChildItem

-ErrorAction "Stop"
powershell error-handling try-catch get-childitem
1个回答
0
投票
但是,它是(a)让您的管道运行到完成的唯一方法,并且(b)确定事实是否仅发生
efrive。

-ErrorAction Stop

    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.