ÚltimoCódigoDeSaída no PowerShell
-
Uso de
$?
em um Ambiente PowerShell -
$LastExitCode
como um Manipulador de Erros no PowerShell - Conclusão

Entender as intricacies do tratamento de erros no PowerShell é essencial para uma scriptagem eficaz. Entre as várias ferramentas disponíveis, $LastExitCode
se destaca como um poderoso mecanismo para capturar o código de saída de comandos externos.
Este artigo mergulha no uso sutil de $LastExitCode
, explorando sua aplicação em diferentes cenários, desde a verificação básica de erros até a execução dinâmica de comandos. Ao dominar $LastExitCode
, os usuários do PowerShell podem melhorar a robustez e a confiabilidade de seus scripts.
Uso de $?
em um Ambiente PowerShell
É importante entender o comando $?
antes de usá-lo aqui. No PowerShell, $?
é uma variável automática que ajuda a determinar o sucesso ou a falha da última operação e pode ser usada como um manipulador de erros.
Com base no último comando executado, ele retorna um valor booleano, True
ou False
. Se o último comando executado no script for bem-sucedido, ele retorna true
; caso contrário, retorna false
.
Uma execução deste comando é mostrada no código de execução abaixo.
Remove-Item -Path "example.txt"
if ($?) {
Write-Host "File removed successfully."
}
else {
Write-Host "Failed to remove file."
}
Neste exemplo, primeiro tentamos remover um arquivo chamado example.txt
. Após executar o comando Remove-Item
, usamos a variável $?
na declaração if
para verificar se a operação foi bem-sucedida.
Se $?
avaliar como True
, exibimos uma mensagem de sucesso; caso contrário, exibimos uma mensagem de falha.
Há uma diferença entre $lastexitcode
e $?
. No entanto, também é usado para tratamento de erros.
$LastExitCode
como um Manipulador de Erros no PowerShell
Há uma diferença no tratamento de erros usado quando o comando é interno e quando o comando é externo.
Você usará $lastexitcode
quando o comando for externo. Isso porque esse comando se aplica apenas a scripts e comandos externos.
O principal objetivo de $LastExitCode
é fornecer feedback sobre o sucesso ou a falha de comandos externos executados dentro de uma sessão PowerShell. Ao acessar $LastExitCode
, os usuários podem determinar se o último comando executado foi bem-sucedido ou encontrou um erro.
Exemplo:
# Execute an external command (ping)
ping example.test
# Check the value of $LastExitCode
$exitCode = $LastExitCode
# Output the exit code
Write-Host "Exit code: $exitCode"
Neste exemplo, tentamos fazer ping em um host chamado example.test
. Após executar o comando ping
, armazenamos o valor de $LastExitCode
em uma variável chamada $exitCode
.
Finalmente, exibimos o código de saída usando o cmdlet Write-Host
. Essa abordagem nos permite acessar e utilizar o código de saída do último comando executado diretamente dentro de nosso script PowerShell.
Saída:
$LastExitCode
Com Invoke-Expression
como um Manipulador de Erros no PowerShell
No PowerShell, o cmdlet Invoke-Expression
permite a execução de comandos ou scripts armazenados em variáveis de string. Quando combinado com $LastExitCode
, ele fornece uma maneira de capturar o código de saída de comandos executados dinamicamente.
Exemplo:
# Define a command as a string
$command = "ping example.test"
# Execute the command using Invoke-Expression
Invoke-Expression -Command $command
# Capture the exit code using $LastExitCode
$exitCode = $LastExitCode
# Output the exit code
Write-Host "Exit code: $exitCode"
Neste exemplo, definimos um comando (ping example.test
) como uma variável de string $command
. Em seguida, usamos Invoke-Expression
para executar o comando armazenado em $command
.
Após a execução, capturamos o código de saída usando $LastExitCode
e o armazenamos na variável $exitCode
. Finalmente, exibimos o código de saída no console.
Saída:
Quando o script anterior era true
, a saída de $LastExitCode
seria sempre 0.
Mas, quando não é bem-sucedido, seria 1 ou qualquer outro inteiro retornado pelo script externo porque o comando $LastExitCode
não é binário, ao contrário do comando $?
.
$LastExitCode
Com Verificações Condicionais como um Manipulador de Erros no PowerShell
Declarações condicionais nos permitem tomar decisões com base no sucesso ou na falha de comandos dentro de um script PowerShell. Vamos ver como podemos aproveitar $LastExitCode
dentro dessas declarações para implementar um tratamento de erros robusto e lógica condicional.
Exemplo:
# Execute an external command (ping)
ping example.test
# Check the value of $LastExitCode
if ($LastExitCode -eq $null) {
Write-Host "No exit code available. An external command might not have been executed."
}
else {
Write-Host "Exit code: $LastExitCode"
}
Neste exemplo, tentamos fazer ping em um host chamado example.test
. Após executar o comando ping
, verificamos o valor de $LastExitCode
.
Se $LastExitCode
for nulo, isso indica que o comando ping
pode não ter sido executado, possivelmente devido a um nome de host inválido ou problema de rede. Caso contrário, imprimimos o código de saída, fornecendo uma visão sobre o sucesso ou a falha do comando ping
.
Saída:
Conclusão
Este artigo forneceu uma visão abrangente sobre a utilização de $LastExitCode
como um manipulador de erros na scriptagem PowerShell. Exploramos seu uso em vários contextos, incluindo verificação básica de erros com $?
, tratamento de erros para comandos externos com $LastExitCode
, execução dinâmica de comandos com Invoke-Expression
e verificações condicionais.
Ao dominar essas técnicas, os usuários do PowerShell podem melhorar suas capacidades de script, garantindo uma detecção e tratamento de erros robustos em seus scripts. Para aprofundar ainda mais seu entendimento, considere explorar tópicos avançados, como captura de erros e tratamento de cenários de erro específicos.
Com uma sólida compreensão das técnicas de tratamento de erros no PowerShell, você estará bem equipado para desenvolver scripts confiáveis e resilientes para várias tarefas de automação.
Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.