我尝试在我的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
答案 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,否则该异常将被包装在系统管理错误周围,因此无法捕获。此处详细说明: