erros PowerShell: Existe uma maneira de armadilha “comando não encontrado” erros em uma função personalizada?
-
22-07-2019 - |
Pergunta
Fundo:
Suponha que eu tenho uma função PowerShell que entende e interpreta small_commands, tais como:
todolist.additem/title=shopping/body=get milk
Suponha ainda que invoco a função como esta:
myfunc [small_command goes here]
Pergunta: Existe uma maneira que eu possa digitar o small_command e ainda ter powershell invoke myfunc, mesmo se eu esquecer de prefixar o pequeno comando com 'myfunc'? Parece que isso poderia funcionar se houver uma maneira de armadilha "comando não encontrado" erros.
A idéia geral por trás desta questão é a capacidade de se recuperar de comando não encontrado erros ao passar a linha de comando incorreto para uma função que pode tentar "recuperar" os meus erros de entrada.
Nota: Também bem-vindo é qualquer crítica a esta abordagem ou idéias alternativas.
Solução
Você pode armadilha CommandNotFound usando a instrução armadilha e especificando quais exceção você é trapping
& {
trap [Management.Automation.CommandNotFoundException]
{
"Code to Run here";
(get-history);
continue
}
NotACommand
}
Este código irá criar uma armadilha para o CommandNotFoundException e quando ele atinge o "comando" NotACommand ele irá chamar a declaração armadilha e executar o código no bloco que tem "Código de correr aqui" e, em seguida, ele vai continuar.
A única coisa que eu não estou certo sobre seriam acessar a linha de comando que jogou a execption. Talvez usando get-história.
Outras dicas
Você precisaria apelido / script cada small_command ...
para myfun small_command ...
prazo.
Aliases pode ajudar, com o script principal olhando para $MyInvocation
, se isso não for reescrito por mapeamento de alias.
Infelizmente não há nenhuma "última trincheira" gancho comando em PowerShell. Eu pedi a equipe para considerar tal recurso embora, mas ele continua a ser visto se v3 irá conter essa característica.
Dito isso, você poderia imitar esse comportamento adicionando algum código para a função alerta que é chamado após cada comando interativo. Você pode testar o $? variável de sistema que indica o sucesso do último comando $ ^. É claro que esta técnica só funciona de forma interativa, e capturar todos os argumentos é difícil.
-Oisin