Je dispose d'un problème sur plusieurs machines pour un client: lors de l'exécution d'un script PowerShell, le processus existe toujours avec SIXITCODE 1
, sauf si un code de sortie est explicitement spécifié dans le script (par exemple, exit 0
).
0
Lorsque le script a couru avec succès, et quand je l'exécute sur ma propre machine, ou n'importe quel serveur en dehors de ce client, le code de sortie est 0
: > ver
Microsoft Windows [Version 6.3.9600]
> type test.ps1
Write-Host testing
> echo %ERRORLEVEL%
0
> powershell -NoProfile -NonInteractive -NoLogo ./test.ps1
testing
> echo %ERRORLEVEL%
1
Est-ce que quelqu'un sait comment je peux résoudre ce problème?
Après la mise à jour de la dernière version de Powershell, la question a été résolue.
(continue de mon commentaire)
Ce sont deux choses complètement séparées:
> type test.ps1
Write-Host testing
> echo %ERRORLEVEL%
0
C'est juste en utilisant Get-Content
(Si vous étiez dans la console PowerShell, pas cmd.exe
) Pour afficher le texte dans le script: [.____]Get-Content
, pas votre code de script> powershell -NoProfile -NonInteractive -NoLogo ./test.ps1
testing
> echo %ERRORLEVEL%
1
powershell.exe
à partir de cmd.exe
, et n'est pas une comparaison des pommes à pommes, vous conduisant à de faux résultats.echo %ERRORLEVEL%
dans une coquille PS n'a pas de sens, car le PS n'a aucune idée de ce que %ERRORLEVEL%
est dans ce contexte d'utilisation; Pour voir la dernière erreur, vous utilisez les variables d'erreur système PS, pas CMD.exe
/Dons trucs.Le code que vous avez posté est de faire tout ce qui est dans cmd.exe
, pas PowerShell; ver
est la commande interne DOS, pas une commande PowerShell:
ver /?
Displays the Windows version.
Get-CimInstance -ClassName CIM_OperatingSystem
SystemDirectory Organization BuildNumber RegisteredUser SerialNumber Version
--------------- ------------ ----------- -------------- ------------ -------
C:\WINDOWS\system32 19043 Test00 00000-00000-00000-AAOEM 10.0.19043
(Get-CimInstance -ClassName CIM_OperatingSystem).Version
10.0.19043
Voir aussi: Renvoyer un code de sortie d'un script PowerShell