Как лучше всего определить, возникает ли ошибка в функции скрипта? Я ищу последовательный способ указать статус ошибки / успеха, аналогичный $? (который работает только с командлетами, но не с функциями сценария.)
Учитывая, что конкретная функция может возвращать значение, которое будет использоваться вызывающим, мы не можем указать успех, возвращая логическое значение. Функция может использовать параметр [ref] и соответствующим образом устанавливать значение внутри функции и проверять после вызова, но это больше накладных расходов, чем хотелось бы. Есть ли что-то встроенное в PowerShell, которое мы можем использовать?
Лучшее, что я могу придумать, это:
Например:
function MyFun {
[CmdletBinding()] # must be an advanced function or this
param () # will not work as ErrorVariable will not exist
process {
# code here....
if ($SomeErrorCondition) {
Write-Error -Message "Error occurred; details..."
return
}
# more code here....
}
}
# call the function
$Err = $null
MyFun -ErrorVariable Err
# this check would be similar to checking if $? -eq $false
if ($Err -ne $null) {
"An error was detected"
# handle error, log/email contents of $Err, etc.
}
Есть что-нибудь получше? Есть ли способ использовать $? в наших скриптовых функциях? Я бы предпочел не бросать исключения или объекты ErrorRecord и не иметь кучу блоков try / catch повсюду. Я бы также предпочел не использовать $ Error, так как это потребует проверки счетчика перед вызовом функции, поскольку там могут быть другие ошибки перед вызовом - и я не хочу использовать Clear () и терять их.