Comment faire pour que SCCM reconnaisse les codes de retour à la fin du script Powershell?

9

J'utilise un déploiement d'application SCCM 2012 pour installer le logiciel. Le type d'installation spécifique est un programme d'installation scripté car SCCM échouait toujours pour les 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 à la fin du script. Je l' ai essayé write-host, return, write-output, et juste une ligne avec le code pour un redémarrage logiciel. Aucun d'eux ne semble être lu par SCCM car le journal d'exécution de l'application capture un retour de 0.

Comment générer des codes retour à partir de PowerShell pour que SCCM puisse les interpréter?

Colyn1337
la source
Avez-vous essayé quelque chose comme exit 1à la fin du script PowerShell?
jscott
Dans ce cas, exitest un cmdintégré. Dans d'autres systèmes de déploiement, j'ai vu des fichiers .ps1 s'exécuter avec startou cmd /c powershell.exe somefile.ps1. Désolé pour spitballing sans accès à un test SCCM.
jscott

Réponses:

9

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

  1. J'ai toujours SCCM invoquer un fichier batch qui exécute le script powershell en invoquant powershell.exeexplicitement.
  2. Je m'assure que chaque chemin de code dans le script d'installation se termine par 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 grande victoire car le dépannage des codes de sortie des scripts d'installation est un processus lent car vous devez attendre que le client SCCM invoque votre script pour chaque itération de dépannage.

Voici à quoi ressemblent le fichier de commandes 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 ne sont-ils pas fiables lorsque SCCM appelle directement des scripts PowerShell?

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

alx9r
la source