我一直在搜索,但我在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 {
}
答案 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 )