Get-ChildItem -SilentlyContinue抛出AccessDenied

时间:2016-07-20 09:20:04

标签: powershell powershell-v4.0

代码:

$cPstFiles = Get-ChildItem -Path $env:USERPROFILE -File -Force `
    -Recurse -Include "*.pst" -ErrorAction "SilentlyContinue"

例外:

Get-ChildItem : Access is denied
At test.ps1:172 char:22
+         $cPstFiles = Get-ChildItem -Path $env:USERPROFILE -File -Force `
+                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Get-ChildItem], UnauthorizedAccessException
    + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.GetChildItemCommand

上下文:PowerShell v4.0 / .NET 4.5.2 / Windows 7。

这怎么可能?我如何让SilentlyContinue做他们应该做的事情?

可能值得一提的是,脚本并不总是失败。它在某些机器上失败但在其他机器上工作得很好,即使在所有这些机器上使用相同的图像部署Windows。

4 个答案:

答案 0 :(得分:2)

$ErrorActionPreference = “silentlycontinue”
$Extension = "*pst"
    $TargetFolder = "$env:userprofile"
    Get-Childitem $TargetFolder -Include $Extension -Recurse 

答案 1 :(得分:1)

只需将其覆盖在try {}块内,并为此类硬错误添加catch {}例程。

哦,我刚刚看到的,ErrorAction应该是SilentlyContinue,而不是" SilentlyContinue"字符串。

答案 2 :(得分:0)

尝试

Set-ExecutionPolicy Remotesigned

最初PS没有权限在系统环境中执行脚本,因此将其设置为ResmoteSigned并使用管理员权限运行可以解决问题。

答案 3 :(得分:0)

由于某些特殊文件或目录,您可能会遇到终止错误。 -erroraction对这些没有帮助。尝试/捕获将验证它正在发生。我已经看到它与Windows Defender文件夹有关。也许您可以排除正在发生该文件夹。