test-path返回权限被拒绝 - 如何进行错误处理

时间:2014-12-02 07:11:09

标签: powershell exception-handling

我尝试在我的powershell脚本中进行错误处理。但我总是致命的。我试了几件事,e。 G。试试{} catch {} - 但我没有开始工作。

任何想法或解决方案?

Function Check-Path($Db)
{
    If ((Test-Path $Db) –eq $false) {
        Write-Output "The file $Db does not   exist"
        break
    }
}

它返回:

Test-Path : Zugriff verweigert
In K:\access\access.ps1:15 Zeichen:6
+ If ((Test-Path $Db) -eq $false) {
+      ~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (K:\ss.mdb:String) [Test-Path],     UnauthorizedAccessException
+ FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.TestPathCommand

2 个答案:

答案 0 :(得分:5)

有些令人困惑Test-Path实际上会在许多情况下产生错误。将标准ErrorAction参数设置为SilentlyContinue以忽略它。

if ((Test-Path $Db -ErrorAction SilentlyContinue) -eq $false) {

答案 1 :(得分:0)

我无法直接回答。因此,这必须要做:

我非常不同意您的回答。当对不可访问的网络共享运行$ -Test时,确实会显示$ false,但是当服务器不可访问时,Test-Path也会显示$ false(无异常)。

因此,您的答案只是忽略了可获得的份额之外的任何内容。

但是,有必要使用一个try-catch-block来更好地处理此问题:

[cmdletbinding()]
param(
    [boolean]$returnException = $true,
    [boolean]$returnFalse = $false
)

## Try-Catch Block:

try {
    if ($returnException) {
        ## Server Exists, but Permission is denied.
        Test-Path -Path "\\Exists\Data\" -ErrorAction Stop | Out-Null
    } elseif ($returnFalse) {
        ## Server does not exist
        Test-Path -Path "\\NoExists\Data\" -ErrorAction Stop | Out-Null
    }
} catch [UnauthorizedAccessException] {
    ## Unauthorized
    write-host "No Access Exception"

} catch {
    ## an error has occurred
    write-host "Any other Exception here"
}

然而,真正重要的部分是Test-Path命令上的ErrorAction,否则该异常将被包装在系统管理错误周围,因此无法捕获。此处详细说明:

PowerShell catching typed exceptions