web-dev-qa-db-fra.com

Comment obtenir SCCM= pour reconnaître les codes de retour de l'achèvement du script PowerShell?

J'utilise un SCCM========== Dépantation d'application pour installer le logiciel. Le type d'installation spécifique est le programme d'installation scripté, comme SCCM Ça continue d'échec pour des erreurs de validation exe. Le script est PowerShell et installe avec succès le logiciel même lorsqu'il est exécuté par SCCM.

Le problème est que SCCM ne voit que le retour de 0 à partir de l'achèvement du script. J'ai essayé write-Host, return, write-output, et juste un élément de ligne avec le code pour un redémarrage doux. Aucun d'entre eux ne semble être lu par SCCM lorsque le journal d'exécution de l'application capture un retour de 0.

Comment publiez-vous des codes de retour de PowerShell de sorte que SCCM peut-il les interpréter?

9
Colyn1337

Il existe un problème connu avec les codes de sortie PowerShell (voir la fin de cette réponse) pouvant manifester lors de l'utilisation de scripts d'installation PowerShell avec SCCM. Pour renforcer le problème, je prends deux mesures:

  1. J'ai toujours SCCM==== Invoque un fichier de commandes qui exécute le script PowerShell en invoquant powershell.exe Explicitement.
  2. Je m'assurens que chaque chemin de code dans le script d'installation se termine dans un appel explicite à [System.Environment]::Exit().

Avec ces deux mesures, je n'ai pas eu de problème lié aux codes de sortie. C'est une énorme victoire car le dépannage des codes de sortie des scripts d'installation est un processus lent, car vous devez attendre le SCCM Client d'appeler votre script pour chaque itération du dépannage.

Voici à quoi ressemble le fichier de lot et le script PowerShell:

Install-Application.bat

powershell.exe .\Install-Application.ps1
exit /b %errorlevel%

Install-Application.ps1

try 
{
    # do a bunch of installation stuff
    if ( $rebootNeeded )
    {
        [System.Environment]::Exit(3010)
    }

    [System.Environment]::Exit(0)
}
catch
{
    [System.Environment]::Exit(1)
}

Pourquoi les codes de sortie sont-ils peu fiables lorsque SCCM invoque directement les scripts PowerShell?

Voici comment nous savons que les codes de sortie ne sont pas fiables:

9
alx9r