Дивлячись на сценарій 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
.