Поделиться через


Сведения о 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
}

СМ. ТАКЖЕ

about_Break

about_Continue

about_Scopes

about_Trap

about_Try_Catch_Finally