Como fazer com que o SCCM reconheça códigos de retorno da conclusão do script do Powershell?

9

Estou usando uma implantação de aplicativo do SCCM 2012 para instalar o software. O tipo de instalação específico é instalador com script, pois o SCCM continuava falhando devido a erros de validação de exe. O script é powershell e instala o software com sucesso, mesmo quando executado pelo SCCM.

O problema é que o SCCM vê apenas o retorno 0 da conclusão do script. Eu tentei 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ê gera códigos de retorno do PowerShell para que o SCCM possa interpretá-los?

Colyn1337
fonte
Você já tentou algo como exit 1no final do script do PowerShell?
Jscott
Neste caso, exité um cmdbuiltin. Em outros sistemas de implantação, vi arquivos .ps1 executados com startou cmd /c powershell.exe somefile.ps1. Desculpe por spitballing sem acesso a um teste SCCM.
Jscott

Respostas:

9

Há um problema conhecido com os códigos de saída do PowerShell (consulte o final desta resposta) que pode se manifestar ao usar 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 lotes que executa o script do PowerShell invocando powershell.exeexplicitamente.
  2. Garanto que todo 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 vitória, pois a solução de problemas dos códigos de saída dos scripts de instalação é um processo lento, pois é necessário aguardar o cliente do SCCM chamar seu script para cada iteração da solução de problemas.

Aqui está a aparência do arquivo em lote e do script 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 os códigos de saída não são confiáveis ​​quando o SCCM chama scripts do PowerShell diretamente?

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

alx9r
fonte