Глядя на скрипт 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.