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


9

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

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

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


exit 1PowerShell 스크립트 끝 과 같은 것을 시도해 보셨습니까 ?
jscott

이 경우 exitA는 cmd내장. 다른 배포 시스템에서 .ps1 파일이 start또는로 실행되는 것을 보았습니다 cmd /c powershell.exe somefile.ps1. SCCM 테스트에 액세스 할 수없는 스피트 볼링에 대해 죄송합니다.
jscott

답변:


9

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 스크립트를 직접 호출 할 때 종료 코드를 신뢰할 수없는 이유는 무엇입니까?

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.