РАЗДЕЛ
about_Throw
КРАТКОЕ ОПИСАНИЕ
Описание ключевого слова Throw, генерирующего ошибку с
завершением работы.
ПОЛНОЕ ОПИСАНИЕ
Ключевое слово Throw вызывает ошибку с завершением работы.
Ключевое слово Throw можно использовать для остановки обработки
команды, функции или скрипта.
Например, ключевое слово Throw можно использовать в блоке скрипта
инструкции If для отклика на условие или в блоке Catch инструкции
Try-Catch-Finally. Ключевое слово Throw можно использовать и при
декларировании параметров, чтобы сделать параметр функции
обязательным.
Ключевое слово Throw может выводить любой объект, в том числе
строку сообщения для пользователя или объект, вызвавший ошибку.
СИНТАКСИС
Ключевое слово Throw имеет следующий синтаксис:
throw [<expression>]
Выражение в синтаксисе Throw является необязательным. Если
ключевое слово Throw не входит в блок Catch и не включает
выражение, оно генерирует ошибку ScriptHalted.
C:\PS> throw
ScriptHalted
At line:1 char:6
+ throw <<<<
+ CategoryInfo : OperationStopped: (:) [], RuntimeException
+ FullyQualifiedErrorId : ScriptHalted
Если ключевое слово Throw используется в блоке Catch без
выражения, оно выводит текущее исключение RuntimeException.
Дополнительные сведения см. в разделе about_Try_Catch_Finally.
ИСПОЛЬЗОВАНИЕ КЛЮЧЕВОГО СЛОВА THROW ДЛЯ СТРОКИ
Необязательным выражением в составе блока Throw может быть
строка, как показано в следующем примере:
C:\PS> throw "Это ошибка."
Это ошибка.
В строке:1 знак:6
+ throw <<<< "Это ошибка."
+ CategoryInfo : OperationStopped: (This is an error.:String) [], RuntimeException
+ FullyQualifiedErrorId : Это ошибка.
ИСПОЛЬЗОВАНИЕ КЛЮЧЕВОГО СЛОВА THROW ДЛЯ ДРУГИХ ОБЪЕКТОВ
Выражение также может являться объектом, который выводит объект,
соответствующий процессу PowerShell, как показано в следующем примере.
C:\PS> throw (get-process powershell)
System.Diagnostics.Process (powershell)
At line:1 char:6
+ throw <<<< (get-process powershell)
+ CategoryInfo : OperationStopped: (System.Diagnostics.Process (powershell):Process) [],
RuntimeException
+ FullyQualifiedErrorId : System.Diagnostics.Process (powershell)
Свойство TargetObject объекта ErrorRecord в автоматической
переменной $error можно использовать для изучения ошибки.
C:\PS> $error[0].targetobject
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
319 26 61016 70864 568 3.28 5548 powershell
Также с помощью ключевого слова Throw может выводиться объект
ErrorRecord или исключение платформы Microsoft.NET Framework. В следующем
примере ключевое слово Throw используется для вывода объекта
System.FormatException.
C:\PS> $formatError = new-object system.formatexception
C:\PS> throw $formatError
Формат одного из идентифицированных элементов неверен.
В строке:1 знак:6
+ throw <<<< $formatError
+ CategoryInfo : OperationStopped: (:) [], FormatException
+ FullyQualifiedErrorId : Формат одного из идентифицированных элементов неверен.
ВОЗВРАЩАЕМАЯ ОШИБКА
Ключевое слово Throw может генерировать объект ErrorRecord.
Свойство Exception объекта ErrorRecord содержит объект
RuntimeException. Остальная часть объекта ErrorRecord и объекта
RuntimeException меняются в зависимости от объекта, выводимого
ключевым словом Throw.
Объект RunTimeException заключается в объект ErrorRecord, а
объект ErrorRecord автоматически сохраняется в автоматической
переменной $Error
ИСПОЛЬЗОВАНИЕ КЛЮЧЕВОГО СЛОВА THROW ДЛЯ СОЗДАНИЯ ОБЯЗАТЕЛЬНОГО ПАРАМЕТРА
Ключевое слово Throw можно использовать для превращения параметра
функции в обязательный.
Это альтернатива использованию параметра Mandatory ключевого
слова Parameter. При использовании параметра Mandatory система
требует у пользователя ввести обязательное значение параметра.
При использовании ключевого слова Throw команда прекращает работу
и выводит запись об ошибке.
Например, ключевое слово Throw в подвыражении параметра делает
параметр Path обязательным параметром функции.
В данном случае ключевое слово Throw выводит строку сообщения,
однако именно присутствие ключевого слова Throw генерирует ошибку
с завершением работы, если параметр Path не указан. Выражение
после ключевого слова Throw является необязательным.
function Get-XMLFiles
{
param ($path = $(throw "The Path parameter is required."))
dir -path $path\* -include *.xml -recurse | sort lastwritetime | ft lastwritetime, attributes, name -auto
}
СМ. ТАКЖЕ
about_Break
about_Continue
about_Scope
about_Trap
about_Try_Catch_Finally