[server] SCCM이 Powershell 스크립트 완료에서 리턴 코드를 인식하도록하는 방법은 무엇입니까?

SCCM 2012 응용 프로그램 배포를 사용하여 소프트웨어를 설치하고 있습니다. SCCM이 exe 유효성 검사 오류로 계속 실패하므로 특정 설치 유형은 스크립트 설치 프로그램입니다. 이 스크립트는 powershell이며 SCCM에 의해 실행될 때도 소프트웨어를 성공적으로 설치합니다.

문제는 SCCM이 스크립트 완료에서 0의 리턴 만 볼 수 있다는 것입니다. 내가 시도했습니다 write-host, return, write-output부드러운 재부팅에 대한 코드, 그냥 광고 항목. 앱 실행 로그가 0의 리턴을 캡처하므로 SCCM이 이들을 읽지 않는 것 같습니다.

SCCM이이를 해석 할 수 있도록 powershell에서 리턴 코드를 어떻게 출력합니까?



답변

SCCM과 함께 powershell 설치 스크립트를 사용할 때 나타날 수있는 powershell 종료 코드 (이 답변의 끝 참조)에 알려진 문제가 있습니다. 이 문제를 해결하기 위해 두 가지 조치를 취합니다.

  1. SCCM은 항상 powershell.exe명시 적으로 호출하여 powershell 스크립트를 실행하는 배치 파일을 호출 합니다.
  2. 설치 스크립트의 모든 코드 경로가에 대한 명시 적 호출로 끝나도록 [System.Environment]::Exit()합니다.

이 두 가지 방법으로 종료 코드와 관련된 문제는 없었습니다. SCCM 클라이언트가 문제 해결을 반복 할 때마다 SCCM 클라이언트가 스크립트를 호출 할 때까지 기다려야하므로 설치 스크립트의 종료 코드 문제를 해결하는 데 시간이 오래 걸리므로 큰 승리입니다.

배치 파일과 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)
}

SCCM이 powershell 스크립트를 직접 호출 할 때 종료 코드를 신뢰할 수없는 이유는 무엇입니까?

종료 코드를 신뢰할 수없는 방법은 다음과 같습니다.


답변