Come fare in modo che SCCM riconosca i codici di ritorno dal completamento dello script Powershell?


9

Sto usando una distribuzione dell'applicazione SCCM 2012 per installare il software. Il tipo di installazione specifico è il programma di installazione con script poiché SCCM non ha funzionato per errori di convalida exe. Lo script è PowerShell e installa correttamente il software anche quando eseguito da SCCM.

Il problema è che SCCM vede solo il ritorno di 0 dal completamento dallo script. Ho provato write-host, return, write-output, e solo un oggetto linea con il codice di un soft reboot. Nessuno di questi sembra essere letto da SCCM poiché il registro di esecuzione dell'app cattura un ritorno di 0.

Come si generano i codici di ritorno da PowerShell in modo che SCCM possa interpretarli?


Hai provato qualcosa di simile exit 1alla fine dello script di PowerShell?
jscott,

In questo caso exitè cmdincorporato. In altri sistemi di distribuzione ho visto i file .ps1 eseguiti con starto cmd /c powershell.exe somefile.ps1. Ci scusiamo per lo spitballing senza accesso a un test SCCM.
jscott,

Risposte:


9

Esiste un problema noto con i codici di uscita PowerShell (vedere la fine di questa risposta) che può manifestarsi quando si utilizzano script di installazione PowerShell con SCCM. Per ovviare al problema, prendo due misure:

  1. Ho sempre SCCM invocare un file batch che esegue lo script PowerShell invocando powershell.exeesplicitamente.
  2. Garantisco che ogni percorso del codice nello script di installazione termina con una chiamata esplicita a [System.Environment]::Exit().

Con queste due misure, non ho avuto problemi relativi ai codici di uscita. Questa è una grande vittoria perché la risoluzione dei codici di uscita degli script di installazione è un processo lento perché devi aspettare che il client SCCM invochi il tuo script per ogni iterazione della risoluzione dei problemi.

Ecco come appaiono il file batch e lo 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)
}

Perché i codici di uscita non sono affidabili quando SCCM invoca direttamente gli script PowerShell?

Ecco come sappiamo che i codici di uscita non sono affidabili:

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.