TÓPICO
about_Throw
DESCRIÇÃO RESUMIDA
Descreve a palavra-chave Throw, que gera um erro de encerramento.
DESCRIÇÃO LONGA
A palavra-chave Throw causa um erro de encerramento. Você pode
usar a palavra-chave Throw para interromper o processamento de um
comando, uma função ou um script.
Por exemplo, é possível usar a palavra-chave Throw no bloco de
script de uma instrução If para responder a uma condição, ou
então no bloco Catch de uma instrução Try-Catch-Finally. Você
também pode usar a palavra-chave Throw em uma declaração de
parâmetro para tornar um parâmetro de função obrigatório.
A palavra-chave Throw pode acionar qualquer objeto, como uma
cadeia de caracteres de mensagem para o usuário ou o objeto que
causou o erro.
SINTAXE
A sintaxe da palavra-chave Throw é a seguinte:
throw [<expressão>]
A expressão na sintaxe de Throw é opcional. Quando a instrução
Throw não aparece em um bloco Catch e não inclui uma expressão,
gera um erro ScriptHalted.
C:\PS> throw
ScriptHalted
At line:1 char:6
+ throw <<<<
+ CategoryInfo : OperationStopped: (:) [], RuntimeException
+ FullyQualifiedErrorId : ScriptHalted
Se a palavra-chave Throw for usada em um bloco Catch sem uma
expressão, acionará a RuntimeException atual novamente. Para
obter mais informações, consulte about_Try_Catch_Finally.
ACIONANDO UMA CADEIA DE CARACTERES
A expressão opcional em uma instrução Throw pode ser uma cadeia
de caracteres, conforme mostrado no exemplo a seguir:
C:\PS> throw "Isto é um erro."
Isto é um erro.
At line:1 char:6
+ throw <<<< "Isto é um erro."
+ CategoryInfo : OperationStopped: (Isto é um erro.:String) [], RuntimeException
+ FullyQualifiedErrorId : Isto é um erro.
ACIONANDO OUTROS OBJETOS
A expressão também pode ser um objeto, que aciona o objeto que
representa o processo do PowerShell, conforme mostrado no
exemplo a seguir:
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)
Você pode usar a propriedade TargetObject do objeto ErrorRecord
na variável automática $error para examinar o erro.
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
Você também pode acionar um objeto ErrorRecord ou uma exceção do
Microsoft .NET Framework. O exemplo a seguir usa a palavra-chave Throw para
acionar um objeto System.FormatException.
C:\PS> $formatError = new-object system.formatexception
C:\PS> throw $formatError
Um dos itens identificados tinha um formato inválido.
At line:1 char:6
+ throw <<<< $formatError
+ CategoryInfo : OperationStopped: (:) [], FormatException
+ FullyQualifiedErrorId : Um dos itens identificados tinha um formato inválido.
ERRO RESULTANTE
A palavra-chave Throw pode gerar um objeto ErrorRecord. A
propriedade Exception do objeto ErrorRecord contém um objeto
RuntimeException. O restante do objeto ErrorRecord e do objeto
RuntimeException varia de acordo com o objeto acionado pela
palavra-chave Throw.
O objeto RunTimeException é encapsulado em um objeto ErrorRecord,
e o objeto ErrorRecord é salvo automaticamente na variável
automática $Error.
USANDO THROW PARA CRIAR UM PARÂMETRO OBRIGATÓRIO
Você pode usar a palavra-chave Throw para tornar um parâmetro de
função obrigatório.
Isso é uma alternativa a usar o parâmetro Mandatory da
palavra-chave Parameter. Quando você usa o parâmetro Mandatory, o
sistema solicita ao usuário o valor de parâmetro necessário.
Quando você usa a palavra-chave Throw, o comando é interrompido e
exibe o registro de erro.
Por exemplo, a palavra-chave Throw na subexpressão do parâmetro
torna o parâmetro Path obrigatório na função.
Nesse caso, a palavra-chave Throw aciona uma cadeia de caracteres
de mensagem, mas será a presença da palavra-chave Throw que irá
gerar o erro de encerramento se o parâmetro Path não for
especificado. A expressão após Throw é opcional.
function Get-XMLFiles
{
param ($path = $(throw "O parâmetro Path é obrigatório."))
dir -path $path\* -include *.xml -recurse | sort
lastwritetime | ft lastwritetime, attributes, name -auto }
CONSULTE TAMBÉM
about_Break
about_Continue
about_Scope
about_Trap
about_Try_Catch_Finally