Дивлячись на сценарій 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генерує сценарій помилки -terminating, яка не збігається з твердженням -terminating помилки , що запускаються, приміром, з допомогою Get-Item -NoSuchParameterабо 1 / 0.