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?


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:

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.