6
votes

Retourner un code d'erreur de cmd à PowerShell

Je travaille sur un script d'installation MSSQL et je souhaite obtenir les résultats d'une installation silencieuse MSSQL. Dans mon script PowerShell, j'exécute cette commande:

$result = (start cmd "/c D:\SQL2008R2\SQL2008R2\setup.exe /CONFIGURATIONFILE=sqlconfig.ini && exit 0 || exit 1")


2 commentaires

Ce n'est pas la façon dont && fonctionne et vous ne pouvez pas choisir quitter 0 ou Quitter 1 Une fois la configuration s'exécute. Vous devez tester errorLEVELL , et c'est généralement effectué dans un fichier de commandes, ce qui pourrait alors quitter le code d'erreur approprié.


Eh bien, cela fonctionne en fait comme ça. && exécute le côté gauche et s'il est faux (la commande a échoué), il exécute le côté droit du && . Groupes de préséance de l'opérateur (gauche && Milieu) || Droit . Maintenant que j'y pense, si || est une fonction conditionnelle ou unique jusqu'à une valeur réelle, alors j'aurais dû utiliser & au lieu de | | .


3 Réponses :


2
votes

Voici comment vous le faites: Démarrer est en fait un alias démarrage-processus , vous devez donc regarder c'est la documentation est beaucoup différent du de CMD.exe Démarrer . Donc, vous pouvez le faire: xxx

si facile!


2 commentaires

N'oubliez pas que cela vous écrira simplement au pipeline. Si vous souhaitez l'écho à STDOUT, vous utiliseriez la cmdlet Host Write-Host.


C'était un faux positif. Comme il s'avère, cela ne fonctionne que si vous supprimez le Démarrer la pièce CMD "/ C . Cela a fonctionné pour moi parce que j'essayais tous les deux dans ma session PowerShell. L'invite de commandement ne renvoie toujours rien. .



10
votes

une alternative à démarrage-processus est l'opérateur d'appel plus syntaxiquement TERSE & . xxx

Le code de sortie sera contenu dans la variable intégrée $ lastexitcode donc: xxx

Ceci contiendra le code de sortie du programme afin que vous n'ayez pas à courir. avec cmd.exe, vous pouvez simplement faire: xxx

appliqué à votre programme de ligne de commande: xxx

ou juste: xxx

dans les deux cas $ lastexitCode devrait être 0 pour réussir, non zéro sinon (si le programme externe a été écrit correctement).


1 commentaires

Oui, j'ai vu que tu pouvais le faire aussi. Je voulais que le mien soit dans une nouvelle fenêtre, cependant. Donc j'avais besoin de start-processus



0
votes

trop tard peut-être mais cela aide-t-il?

start /WAIT cmd.exe /C "YOUR-COMMAND-HERE & exit MY-ERROR-CODE" & if errorlevel 1 echo 'error occurred'


0 commentaires