2015-08-05 3 views
0

Я искал какое-то время, но я не могу найти исключение в 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

Ошибка вы получите это 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 { 
}
0

Не используйте блоки try/catch для управления потоком. Это обычная практика, особенно в PowerShell, поскольку командлеты PowerShell будут писать ошибки, а не бросать исключения. Обычно объекты, отличные от не-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) 
Смежные вопросы