SCCM Powershell algılama komut dosyaları hangi bağlamda çalışır?


11

Sonunda AllSignedyürütme politikası olan istemcilerde PowerShell algılama komut dosyalarını kullanarak başarılı oldum . (ipucu: En son hizmet paketini yükledikten ve Adam Meltzer'in geçici çözümünü kullandıktan sonra çalışmaya başladı .)

Uygulama algılaması için PowerShell komut dosyalarını kullanmak artık pratik olduğuna göre, aşağıdakileri merak etmemi sağlıyor:

  1. SCCM istemcisi PowerShell algılama komut dosyalarını hangi bağlamda çalıştırır? Sistem? Kullanıcı?
  2. Bağlam, Dağıtım Türü'nde "Kullanıcı için yükle" veya "Sistem için yükle" yi seçmenize bağlı mı?

Belgeler bu konuda oldukça seyrek. SCCM PowerShell algılama komut dosyaları için bulduğum en iyi kaynak bu Kloud blog yayınıdır , ancak bağlam konusunda sessizdir.

Yanıtlar:


13

Ampirik Sonuçlar

Algılama komut dosyası olarak çalıştırıldığında, algılama komut dosyasının bir günlük dosyasına gördüğü ortam değişkenlerini dökerken bazı PowerShell yazdım. Bu senaryo bu cevabın sonunda.

Daha sonra farklı "Kurulum Davranışı" ve "Oturum açma gereksinimi" parametreleriyle bir Dağıtım Türü dağıtarak bu komut dosyasının SCCM istemcisi tarafından çalıştırılmasına neden olur. Sonuçlar aşağıdaki tabloda verilmiştir:

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 kullanıcı adları
  • cnX bilgisayar isimleri

analiz

Yukarıdaki sonuçlar şaşırtıcıdır çünkü bir algılama komut dosyasının içinde çalıştığı bağlamın kısmen Uygulamanın bir kullanıcıya mı yoksa bir sisteme mi dağıtıldığına bağlı olduğu görülmektedir. Testleri ikinci kez çalıştırmam şaşırtıcıydı. Sonuçlar tutarlıydı.

Yukarıdaki tablodan aşağıdaki hipotezleri geçici olarak çizebiliriz:

  1. Bir Uygulama bir kullanıcıya dağıtıldığında, o Uygulama için bir PowerShell algılama komut dosyası o kullanıcı olarak çalıştırılır.
  2. Bir sisteme Uygulama dağıtıldığında ve sistem için Dağıtım Türü yüklendiğinde, o Uygulama için bir PowerShell algılama komut dosyası sistem olarak çalıştırılır.
  3. Bir sisteme bir Uygulama dağıtıldığında ve Dağıtım Türü kullanıcı için yüklendiğinde, o Uygulama için bir PowerShell algılama komut dosyası oturum açmış kullanıcı olarak çalıştırılır.

Yukarıdaki üç hipotez test sonuçları tarafından desteklenmektedir. Bu hipotezlerin olmadığı yerde test edilmemiş başka değişkenler de olabilir. Bunlar, PowerShell algılama komut dosyalarını kullanırken en azından iyi bir başlangıç ​​varsayımı kümesidir.

Eşleşmeyen Bağlamlar (Dikkat!)

Jason Sandys, kurulum bağlamındaki kuralların benzer bir testini belgeledi. Bu gönderiyi dikkatlice okursanız, yükleme bağlamı ve algılama komut dosyası bağlamıyla ilgili kuralların tamamen aynı olmadığını fark edebilirsiniz. İşte rahatsız edici kurallar:

Bir Uygulamanın yükleme davranışı "Sistem Olarak Yükle" olarak ayarlandığında, yükleyici [kullanıcıya dağıtımdan bağımsız olarak) sistem olarak çalıştırılır.

Bir Uygulama bir kullanıcıya dağıtıldığında, o Uygulama için bir PowerShell algılama komut dosyası o kullanıcı olarak çalıştırılır [yükleme davranışının "Sistem Olarak Yükle" olarak ayarlanmasına bakılmaksızın].

Bu , yükleme davranışı “Sistem olarak yükle” olan ve bir kullanıcı koleksiyonuna dağıtılan bir Uygulamanın yükleme için sistem bağlamını, ancak algılama için kullanıcı bağlamını kullanacağı anlamına gelir .

Yükleme davranışının "Sistem Olarak Yükle" olduğu Uygulamalar için algılama komut dosyaları yazan bir kişi, ortamın sistem ve kullanıcı bağlamları arasında değişen herhangi bir bölümüne güvenmemeye dikkat etmelidir. Aksi takdirde, bir sistem koleksiyonuna dağıtılan bir Uygulamanın algılanması başarılı olurken, bir kullanıcı koleksiyonuna dağıtılan Uygulamanın tam olarak algılanması başarısız olur.

Senaryo

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)
}

Sağlam bir SCCM sorusu ve cevabı için +1. Umarım burada SCCM topluluğu büyümek için tek şey olduğum için büyür (etiketler için e-posta aboneliği.) Burada, onları comin tutmak için bir motivasyon olarak ekstra destek var.
MDMoore313

2
Teşekkürler @BigHomie. Ben de SCCM için filtreliyorum ... ama bir demet özlüyorum çünkü o filtrelenmiş akışı mobil olarak almanın pratik bir yolu yok .
alx9r

2
Mükemmel SCCM sorusu! Gelin ve [sccm] etiketinin @BigHomie ve ben - bakıcılarına katılın. Kelimenin tam anlamıyla bir çift var.

Darn Skippy, @kce, Windows etiketinin bu tarafında da en iyi sorulara sahip.
MDMoore313
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.