2010-10-20 14 views
14

Ciao, sono abbastanza nuovo per PowerShell ma ho una domanda insignificante. Voglio essere in grado di dire se un comando è stato completato correttamente in modo da poter dare messaggi significativi all'host.Determinare se un comando PowerShell ha avuto esito positivo

Sto utilizzando il comando appcmd per aggiungere un'associazione in IIS. In sostanza che va come segue:

./appcmd set site /site.name:........................

Ma come posso fare un controllo per assicurarsi che ha avuto successo o no?

Penso che se metto appena Write-Host "Successfully added binding" dopo quell'istruzione, verrà attivato dopo indipendentemente dal fatto che lo appcmd abbia avuto esito positivo.

Sto indovinando che ho bisogno di fare qualcosa di simile:

$successful = ./appcmd set site /site.name:........................

ma poi $successful sembra essere una stringa contenente il risultato msg?

Grato aiuto su questo! Cheers

risposta

17

Supponendo che appcmd sia un exe di console, anche se si verificano errori, verrà eseguita la riga successiva nello script.

Se si desidera verificare se il file EXE è errato e l'EXE utilizza il codice di uscita standard 0 per indicare il successo, è sufficiente controllare la variabile speciale $? subito dopo aver chiamato l'EXE. Se è $ true, l'EXE ha restituito un codice di uscita 0.

Se l'EXE non è standard in termini di codice di uscita restituisce per successo (forse ha più codici di successo) quindi ispeziona $LastExitCode per ottenere il codice esatto di uscita restituito dall'ultimo EXE.

+0

grazie per la risposta. Quindi sto assumendo che '$?' E '$ LastExitCode' siano relativi? Supponiamo che io esegua questo (o un altro) cmd in tutto lo script - quelle vars sono relative all'ultimo comando che è stato eseguito? – baron

+1

Esattamente. '$?' si applica a tutti i comandi di esecuzione. Indica il successo per il precedente comando più. Si noti che gli errori non terminanti (idontexist Get-ChildItem) continuano a restituire true. Se un comando genera un errore di terminazione, allora '$?' Restituisce $ false. Se necessario, è possibile forzare un comando per convertire un errore non terminante in un errore di terminazione utilizzando il parametro ubiquitario '-ErrorAction Stop'. '$ LastExitCode' contiene il codice di uscita per l'EXE eseguito più recentemente. –