首页 > 解决方案 > Powershell:无法隐藏“删除项目”上的“访问被拒绝”错误

问题描述

我想保持Remove-Item安静的指令,例外与否。我在脚本中运行以下命令来删除证书:

Remove-Item $store\$thumbprint

如果我以本地管理员身份运行脚本,很好......它保持安静并且文件被删除。但是,如果我以非特权用户身份运行它,我会按预期收到“拒绝访问”错误,但无论如何我都希望保持安静。

我尝试了以下方法:

$output = (Remove-Item $store\$thumbprint)
# or...
try{Remove-Item $store\$thumbprint} catch{}
# or...
Remove-Item $store\$thumbprint -ErrorAction SilentlyContinue

但我总是在控制台上显示错误/异常。

标签: powershellexceptionerror-handling

解决方案


默认情况下,会生成一个非终止错误Remove-Item,并将错误添加到$Error变量中而不会引发异常。要查看出现非终止错误时 Windows PowerShell 将执行的操作,请查看$ErrorActionPreference变量的值(其默认值为Continue)。

Access to the path '…' is denied是此类非终止错误的示例,因此您可以使用ErrorAction参数来覆盖当前命令$ErrorActionPreference的变量值:

Remove-Item $store\$thumbprint -ErrorAction SilentlyContinue

另一方面,$ErrorActionPreferenceErrorAction参数不会影响 PowerShell 如何响应停止 cmdlet 处理的终止错误。因此,如果我们不确定错误是否终止,那么可以安全地处理Try-Catch-Finally块使用的任何错误-ErrorAction Stop,如下所示:

try {
    Remove-Item $store\$thumbprint -ErrorAction Stop
} catch {
    ### A Catch block can include commands for tracking the error
    ###         or for recovering the expected flow of the script
}

推荐阅读