Сведения о throw
КРАТКОЕ ОПИСАНИЕ
Содержит описание ключевого слова Throw, генерирующего прерывающую ошибку.
ПОДРОБНОЕ ОПИСАНИЕ
Ключевое слово Throw приводит к неустранимой ошибке. С помощью ключевое слово Throw можно остановить обработку команды, функции или скрипта.
Например, можно использовать ключевое слово Throw в блоке скрипта оператора If для реагирования на условие или в блоке Catch инструкции Try-Catch-Finally. Можно также использовать ключевое слово Throw в объявлении параметра, чтобы сделать параметр функции обязательным.
Ключевое слово Throw может вызывать любой объект, например строку сообщения пользователя или объект, вызвавшего ошибку.
SYNTAX
Синтаксис ключевое слово 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 может быть строкой, как показано в следующем примере:
C:\PS> throw "This is an error."
This is an error.
At line:1 char:6
+ throw <<<< "This is an error."
+ CategoryInfo : OperationStopped: (This is an error.:String) [], R
untimeException
+ FullyQualifiedErrorId : This is an error.
СОЗДАНИЕ ДРУГИХ ОБЪЕКТОВ
Выражение также может быть объектом , который создает объект , представляющий процесс 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 (Pow
erShell):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
Вы также можете создать объект ErrorRecord или исключение Microsoft платформа .NET Framework. В следующем примере используется ключевое слово Throw для создания объекта System.FormatException.
C:\PS> $formatError = new-object system.formatexception
C:\PS> throw $formatError
One of the identified items was in an invalid format.
At line:1 char:6
+ throw <<<< $formatError
+ CategoryInfo : OperationStopped: (:) [], FormatException
+ FullyQualifiedErrorId : One of the identified items was in an invalid
format.
РЕЗУЛЬТИРУЮЩАЯ ОШИБКА
Ключевое слово Throw может создать объект ErrorRecord. Свойство Exception объекта ErrorRecord содержит объект RuntimeException. Остальная часть объекта ErrorRecord и RuntimeException зависят от объекта, который вызывает ключевое слово Throw.
Объект RunTimeException упаковывается в объект ErrorRecord, а объект ErrorRecord автоматически сохраняется в $Error автоматической переменной.
ИСПОЛЬЗОВАНИЕ THROW ДЛЯ СОЗДАНИЯ ОБЯЗАТЕЛЬНОГО ПАРАМЕТРА
Чтобы сделать параметр функции обязательным, можно использовать ключевое слово Throw.
Это альтернатива использованию параметра Обязательный ключевое слово. При использовании параметра Обязательный система запрашивает у пользователя требуемое значение параметра. При использовании ключевое слово Throw команда останавливается и отображает запись об ошибке.
Например, ключевое слово Throw в подэкспрессии параметра делает параметр Path обязательным параметром в функции .
В этом случае ключевое слово Throw выдает строку сообщения, но наличие ключевое слово Throw создает завершающую ошибку, если параметр Path не указан. Выражение, следующее за throw, является необязательным.
function Get-XMLFiles
{
param ($path = $(throw "The Path parameter is required."))
dir -path $path\*.xml -recurse |
sort lastwritetime |
ft lastwritetime, attributes, name -auto
}