SCCM Powershell 감지 스크립트는 어떤 컨텍스트에서 실행됩니까?


11

나는 마침내 AllSigned실행 정책을 가진 클라이언트에서 PowerShell 감지 스크립트를 사용하여 성공했습니다 . (힌트 : 최신 서비스 팩 을 설치 하고 Adam Meltzer의 해결 방법을 사용한 후에 작동하기 시작했습니다 .)

이제 응용 프로그램 검색에 PowerShell 스크립트를 사용하는 것이 실용적이기 때문에 다음 사항을 궁금해합니다.

  1. SCCM 클라이언트는 어떤 컨텍스트에서 PowerShell 감지 스크립트를 실행합니까? 체계? 사용자?
  2. 배포 유형에서 "사용자 설치"또는 "시스템 설치"를 선택하는지에 따라 컨텍스트가 달라 집니까?

이 주제에 대한 문서는 매우 드물다. SCCM PowerShell 감지 스크립트에 대해 찾은 최고의 리소스는 이 Kloud 블로그 게시물 이지만 컨텍스트에 대해서는 언급하지 않습니다.

답변:


13

경험적 결과

감지 스크립트로 실행될 때 감지 스크립트가 보는 환경 변수를 로그 파일에 덤프하는 일부 PowerShell을 작성했습니다. 이 스크립트는이 답변의 끝에 있습니다.

그런 다음 "설치 동작"및 "로그온 요구 사항"매개 변수가 다른 배포 유형을 배포하여 SCCM 클라이언트가이 스크립트를 실행하게합니다. 결과는 아래 표에 있습니다.

Test InstallationBehavior LogonRequirement                   DeployedTo LoggedOnUser ScriptRunAs
---- -------------------- ----------------                   ---------- ------------ -----------     
1.1a Install for user     Only when a user is logged on      un2        un2          un2        
1.1b Install for user     Only when a user is logged on      cn1        un2          un2        
1.1c Install for user     Only when a user is logged on      cn1        un1          un1        
1.2a Install for system   Only when a user is logged on      un2        un2          un2        
1.2b Install for system   Only when a user is logged on      cn1        un2          cn1        
1.2c Install for system   Only when a user is logged on      cn1        un1          cn1        
1.3a Install for system   Whether or not a user is logged on un2        un2          un2        
1.3b Install for system   Whether or not a user is logged on cn1        un2          cn1        
1.3c Install for system   Whether or not a user is logged on cn1        un1          cn1        
  • unX 사용자 이름입니다
  • cnX 컴퓨터 이름입니다

분석

위의 결과는 탐지 스크립트가 실행되는 컨텍스트가 응용 프로그램이 사용자 또는 시스템에 배포되었는지 여부에 부분적으로 의존하는 것처럼 보이기 때문에 놀랍습니다. 테스트를 두 번째로 실행 한 것은 놀랍습니다. 결과는 일관되었다.

위의 표에서 다음과 같은 가설을 잠정적으로 그릴 수 있습니다.

  1. 응용 프로그램이 사용자에게 배포되면 해당 응용 프로그램의 PowerShell 검색 스크립트가 해당 사용자로 실행됩니다.
  2. 응용 프로그램을 시스템에 배포하고 시스템에 배포 유형을 설치하면 해당 응용 프로그램의 PowerShell 검색 스크립트가 시스템으로 실행됩니다.
  3. 응용 프로그램이 시스템에 배포되고 사용자에 대한 배포 유형이 설치되면 해당 응용 프로그램의 PowerShell 검색 스크립트가 로그인 한 사용자로 실행됩니다.

위의 세 가지 가설은 테스트 결과에 의해 뒷받침됩니다. 이러한 가설이 적용되지 않는 경우 테스트되지 않은 다른 변수가있을 수 있습니다. PowerShell 탐지 스크립트를 사용할 때는 최소한 초기 가정이 필요합니다.

일치하지 않는 컨텍스트 (주의!)

Jason Sandys는 설치 컨텍스트에 대한 유사한 규칙 테스트를 문서화했습니다. 해당 게시물을주의 깊게 읽으면 설치 컨텍스트 및 검색 스크립트 컨텍스트에 대한 규칙이 완전히 일치하지 않을 수 있습니다. 위반 규칙은 다음과 같습니다.

응용 프로그램의 설치 동작이 "시스템으로 설치"로 설정되면 설치 프로그램은 [사용자 배포와 관계없이] 시스템으로 실행됩니다.

응용 프로그램이 사용자에게 배포되면 설치 동작이 "시스템으로 설치"로 설정되어 있는지 여부에 관계없이 해당 응용 프로그램의 PowerShell 검색 스크립트가 해당 사용자로 실행됩니다.

것을이 수단 설치 동작이있는 응용 프로그램 "시스템으로 설치" 설치를위한 시스템 컨텍스트를 사용하는 사용자 컬렉션에 배치되어 있지만, 검출을위한 사용자 컨텍스트.

설치 동작이 "시스템으로 설치"인 응용 프로그램에 대한 검색 스크립트를 작성하는 사람은 시스템과 사용자 컨텍스트 사이에서 변경되는 환경 부분에 의존하지 않도록주의해야합니다. 그렇지 않으면 시스템 모음에 배포 된 응용 프로그램 검색이 성공한 반면 사용자 모음에 배포 된 동일한 응용 프로그램 검색에 실패 할 수 있습니다.

스크립트

function Write-EnvToLog
{
    $appName = 'script-detect-test'

    $logFolderPath = "c:\$appName-$([System.Environment]::UserName)"

    if ( -not (Test-Path $logFolderPath -PathType Container) )
    {
        New-Item -Path $logFolderPath -ItemType Directory | Out-Null
    }

    if ( -not (Test-Path $logFolderPath -PathType Container ) )
    {
        return
    }

    $logFileName = "$appName`__$((Get-Date).ToString("yyyy-MM-dd__HH-mm-ss")).txt"

    $fp = "$logFolderPath\$logFileName"

    Get-ChildItem Env: | Out-File $fp | Out-Null

    return $true
}

try
{
    if ( Write-EnvToLog ) { "Detected!" }
    [System.Environment]::Exit(0)
}
catch
{
    [System.Environment]::Exit(0)
}

확실한 SCCM 질문과 답변을 위해 +1. SCCM 커뮤니티가 내가 계속 지켜봐야 할 유일한 곳 (태그에 대한 이메일 구독)이므로 여기에서 SCCM 커뮤니티가 성장하기를 바랍니다.
MDMoore313

2
감사합니다 @BigHomie. SCCM도 필터링하고 있지만 모바일에서 필터링 된 스트림을 얻을 수있는 실용적인 방법이 없기 때문에 무리가 없습니다 .
alx9r 2016 년

2
훌륭한 SCCM 질문! [sccm] 태그의 @BigHomie와 I-관리인과 함께하십시오. 말 그대로 우리 둘이 있습니다.

Dark Skippy, @kce는 Windows 태그 의이 측면에서도 가장 좋은 질문을합니다.
MDMoore313
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.