У меня был следующий фрагмент в функции, которую я пишу, чтобы проверить, доступен ли текущий пользователь для записи в каталог или нет:
# Write temp file to see if we can
$checkPermArgs = @{
Path = $tempFilePath
ErrorAction = 'SilentlyContinue'
ErrorVariable = 'wError'
}
Write-Verbose "Writing file ${tempFilePath}"
"$($MyInvocation.MyCommand) check $([DateTime]::Now)" | Out-File @checkPermArgs
# Check for any errors
if( $wError ) {
return $false
} else {
$true
}
Насколько я понимаю, IOException
должна быть завершающей ошибкой, но по какой-то причине я продолжаю выполнять свою функцию. Если я попытаюсь написать в $tempFilePath
и получу IOException
, вместо того, чтобы завершить мою функцию, она продолжит работу и вычислит оператор if( $wError )
, вернув и отобразив $false
в консоли, что приведет к следующему выводу:
Out-File:
Line |
34 | … cation.MyCommand) check $([DateTime]::Now)" | Out-File @checkPermArgs
| ~~~~~~~~~~~~~~~~~~~~~~~
| Access to the path '/path/to/tempFile.txt' is denied.
False
Поскольку цель состоит в том, чтобы по-прежнему обрабатывать ошибку, не отображая ее для конечного пользователя, я понял, что вместо этого оплошал и завернул Out-File
в блок try/catch
, но мне любопытно, почему завершающая ошибка здесь на самом деле не прерывает выполнение функции.
$erroractionpreference
? - person Doug Maurer   schedule 08.10.2020$ErrorActionPrefernce
не должен влиять на завершение ошибок:$ErrorActionPreference and the ErrorAction parameter don't affect how PowerShell responds to terminating errors that stop cmdlet processing.
- person Bender the Greatest   schedule 08.10.2020