Como obter o SCCM para reconhecer os códigos de retorno da conclusão do script Powershell?

8

Estou usando uma implantação do aplicativo SCCM 2012 para instalar o software. O tipo de instalação específico é um instalador com script, já que o SCCM não fornece erros de validação de exe. O script é powershell e instala com sucesso o software, mesmo quando executado pelo SCCM.

O problema é que o SCCM só vê o retorno de 0 da conclusão do script. Experimentei write-host , return , write-output e apenas um item de linha com o código para uma reinicialização suave. Nenhum deles parece ser lido pelo SCCM, pois o log de execução do aplicativo captura um retorno de 0.

Como você produz códigos de retorno do powershell para que o SCCM possa interpretá-los?

    
por Colyn1337 25.08.2015 / 22:56

1 resposta

8

Existe um problema conhecido com os códigos de saída do PowerShell (consulte o final desta resposta) que podem se manifestar ao usar os scripts de instalação do PowerShell com o SCCM. Para solucionar o problema, tomo duas medidas:

  1. Eu sempre tenho o SCCM invocar um arquivo em lote que executa o script powershell invocando powershell.exe explicitamente.
  2. Asseguro que cada caminho de código no script de instalação termine em uma chamada explícita para [System.Environment]::Exit() .

Com essas duas medidas, não tive um problema relacionado aos códigos de saída. Essa é uma grande vantagem, pois a solução dos códigos de saída dos scripts de instalação é um processo lento, porque você precisa aguardar o cliente SCCM invocar seu script para cada iteração de solução de problemas.

Veja a aparência do script em lote e do 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)
}

Por que códigos de saída não são confiáveis quando o SCCM invoca scripts de powershell diretamente?

Veja como sabemos que os códigos de saída não são confiáveis:

por 26.08.2015 / 05:35