Errori Powershell: esiste un modo per intercettare errori "comando non trovato" in una funzione personalizzata?

StackOverflow https://stackoverflow.com/questions/1445412

Domanda

Sfondo:

Supponiamo di avere una funzione PowerShell che comprende e interpreta i comandi piccoli come:

todolist.additem/title=shopping/body=get milk

Supponi inoltre di invocare la funzione in questo modo:

myfunc [small_command goes here]

Domanda: Esiste un modo in cui posso digitare il comando piccolo e continuare a far sì che PowerShell invochi myfunc, anche se dimentico di aggiungere il prefisso "myfunc" al comando piccolo? Sembra che questo potrebbe funzionare se esiste un modo per intercettare il comando "quot non trovato" errori.

L'idea generale alla base di questa domanda è la possibilità di recuperare dal comando errori non trovati passando la riga di comando offensiva a una funzione che può provare a "recuperare". dai miei errori di input.

Nota: Anche il benvenuto è una critica di questo approccio o idee alternative.

È stato utile?

Soluzione

Puoi intercettare CommandNotFound usando l'istruzione trap e specificando quale eccezione stai intercettando

& {
    trap [Management.Automation.CommandNotFoundException] 
    {
        "Code to Run here"; 
        (get-history);
        continue
    } 
    NotACommand
    }

Questo codice imposta una trap per CommandNotFoundException e quando colpisce il comando NotACommand " " chiamerà l'istruzione trap ed eseguirà il codice nel blocco che ha "Codice da eseguire qui" e poi continuerà.

L'unica cosa di cui non sono sicuro sarebbe l'accesso alla riga di comando che ha lanciato l'esecuzione. Forse usando get-history.

Altri suggerimenti

Dovresti alias / script ogni small_command ... per eseguire myfun small_command ... .

Gli alias potrebbero aiutare, con lo script principale che guarda $ MyInvocation , se questo non è riscritto dalla mappatura degli alias.

Sfortunatamente non c'è "ultimo fossato" hook di comando in PowerShell. Ho chiesto al team di prendere in considerazione tale funzionalità, ma resta da vedere se v3 conterrà tale funzionalità.

Detto questo, potresti emulare questo comportamento aggiungendo del codice nella funzione prompt che viene chiamata dopo ogni comando interattivo. Potresti testare $? variabile di sistema che indica il successo dell'ultimo comando $ ^. Naturalmente questa tecnica funzionerebbe solo in modo interattivo e catturare tutti gli argomenti è difficile.

-Oisin

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top