РАЗДЕЛ 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