SCCM 2012 응용 프로그램 배포를 사용하여 소프트웨어를 설치하고 있습니다. SCCM이 exe 유효성 검사 오류로 계속 실패하므로 특정 설치 유형은 스크립트 설치 프로그램입니다. 이 스크립트는 powershell이며 SCCM에 의해 실행될 때도 소프트웨어를 성공적으로 설치합니다.
문제는 SCCM이 스크립트 완료에서 0의 리턴 만 볼 수 있다는 것입니다. 내가 시도했습니다 write-host
, return
, write-output
부드러운 재부팅에 대한 코드, 그냥 광고 항목. 앱 실행 로그가 0의 리턴을 캡처하므로 SCCM이 이들을 읽지 않는 것 같습니다.
SCCM이이를 해석 할 수 있도록 powershell에서 리턴 코드를 어떻게 출력합니까?
답변
SCCM과 함께 powershell 설치 스크립트를 사용할 때 나타날 수있는 powershell 종료 코드 (이 답변의 끝 참조)에 알려진 문제가 있습니다. 이 문제를 해결하기 위해 두 가지 조치를 취합니다.
- SCCM은 항상
powershell.exe
명시 적으로 호출하여 powershell 스크립트를 실행하는 배치 파일을 호출 합니다. - 설치 스크립트의 모든 코드 경로가에 대한 명시 적 호출로 끝나도록
[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 스크립트를 직접 호출 할 때 종료 코드를 신뢰할 수없는 이유는 무엇입니까?
종료 코드를 신뢰할 수없는 방법은 다음과 같습니다.
- powershell이 특정 방식으로 시작될 때 항상 종료 코드 0을 반환하는 알려진 버그가 하나 이상 있습니다.
- 따라서 시작 방법이 확실하면 스크립트의 종료 코드에만 의존 할 수 있습니다 .
- SCCM이 특히 SCCM, Windows 및 WMF 버전에서 powershell 스크립트를 시작하는 방법을 정확히 확신 할 수는 없습니다.