Глядя на скрипт Get-WebFile на PoshCode, http://poshcode.org/3226 , я заметил странное для меня устройство:
$URL_Format_Error = [string]"..."
Write-Error $URL_Format_Error
return
В чем причина этого, а не в следующем?
$URL_Format_Error = [string]"..."
Throw $URL_Format_Error
Или даже лучше:
$URL_Format_Error = New-Object System.FormatException "..."
Throw $URL_Format_Error
Как я понимаю, вы должны использовать Write-Error для нескончаемых ошибок и Throw для завершающих ошибок, поэтому мне кажется, что вы не должны использовать Write-Error с последующим возвратом. Есть ли разница?
return
это не возвращение к вызывающему в process
блоке (расширенный) функции; вместо этого он переходит к следующему входному объекту в конвейере. Действительно, это типичный сценарий для генерации нескончаемых ошибок: если обработка дополнительных входных объектов все еще возможна.
Throw
генерируется ошибка, определяющая сценарий , которая не совпадает с ошибкой, определяющей оператор, которая вызывается, например, с помощью Get-Item -NoSuchParameter
или 1 / 0
.