抓住“无法找到档案”

时间:2015-08-05 21:50:14

标签: powershell try-catch

我一直在搜索,但我在PowerShell中找不到会出现“无法找到文件”错误的异常。

我还希望有这个循环,直到用户输入正确的文件名来获取。

# Ask user for file to read from
Try {
    $readFile = Read-Host "Name of file to read from: "
    $ips = GC $env:USERPROFILE\Desktop\$readFile.txt
}
Catch {

}

2 个答案:

答案 0 :(得分:2)

你得到的错误是non-terminating error,因此没有被抓住。将-ErrorAction Stop添加到Get-Content语句或设置$ErrorActionPreference = 'Stop',您的代码将按预期运行:

try {
  $readFile = Read-Host "Name of file to read from: "
  $ips = GC $env:USERPROFILE\Desktop\$readFile.txt -ErrorAction Stop
} catch {
}

答案 1 :(得分:0)

不要使用try / catch块进行流量控制。这是一种普遍不受欢迎的做法,特别是在PowerShell中,因为PowerShell的cmdlet会写错误而不是抛出异常。通常,只有非PowerShell .NET对象才会抛出异常。

而是测试文件是否存在。这为您提供了更大的错误控制:

do
{
    $readFile = Read-Host "Name of file to read from: "
    $path = '{0}\Desktop\{1}.txt' -f $env:USERPROFILE,$readFile
    if( (Test-Path -Path $path -PathType Leaf) )
    {
        break
    }
    Write-Error -Message ('File ''{0}'' not found.' -f $path)
}
while( $true )