In quale contesto vengono eseguiti gli script di rilevamento di SCCM Powershell?


11

Ho finalmente avuto successo utilizzando gli script di rilevamento di PowerShell sui client con AllSignedcriteri di esecuzione. (suggerimento: ha iniziato a funzionare dopo l'installazione dell'ultimo service pack e l'utilizzo della soluzione alternativa di Adam Meltzer .)

Ora che è pratico usare gli script di PowerShell per il rilevamento delle applicazioni, mi chiedo quanto segue:

  1. In quale contesto il client SCCM esegue gli script di rilevamento di PowerShell? Sistema? Utente?
  2. Il contesto dipende se si seleziona "Installa per utente" o "Installa per sistema" nel Tipo di distribuzione?

La documentazione è piuttosto scarsa su questo argomento. La migliore risorsa che ho trovato per gli script di rilevamento di PowerChell di SCCM è questo post sul blog di Kloud , tuttavia, è silenzioso sulla questione del contesto.

Risposte:


13

Risultati empirici

Ho scritto alcuni PowerShell che, quando eseguito come script di rilevamento, scarica le variabili di ambiente che lo script di rilevamento vede in un file di registro. Quella sceneggiatura è alla fine di questa risposta.

Quindi faccio eseguire questo script dal client SCCM distribuendo un tipo di distribuzione con diversi parametri "Comportamento installazione" e "Requisiti di accesso". I risultati sono nella tabella seguente:

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 sono nomi utente
  • cnX sono nomi di computer

Analisi

I risultati di cui sopra sono sorprendenti perché il contesto in cui viene eseguito uno script di rilevamento sembra dipendere in parte dal fatto che l'applicazione sia stata distribuita a un utente o un sistema. Questa è stata una sorpresa abbastanza che ho eseguito i test una seconda volta. I risultati sono stati coerenti.

Possiamo provvisoriamente trarre le seguenti ipotesi dalla tabella sopra:

  1. Quando un'applicazione viene distribuita a un utente, uno script di rilevamento PowerShell per tale applicazione viene eseguito come tale utente.
  2. Quando un'applicazione viene distribuita su un sistema e il tipo di distribuzione è installato per il sistema, uno script di rilevamento PowerShell per quell'applicazione viene eseguito come sistema.
  3. Quando un'applicazione viene distribuita su un sistema e viene installato il tipo di distribuzione per l'utente, uno script di rilevamento di PowerShell per tale applicazione viene eseguito come utente connesso.

Le tre ipotesi sopra riportate sono supportate dai risultati del test. Potrebbero esserci alcune altre variabili che non sono state testate in cui queste ipotesi non valgono. Sono almeno una buona serie di ipotesi iniziali quando si usano gli script di rilevamento di PowerShell.

Contesti non corrispondenti (attenzione!)

Jason Sandys ha documentato un test analogo delle regole per il contesto di installazione. Se leggi attentamente questo post, potresti notare che le regole per il contesto di installazione e il contesto dello script di rilevamento non sono esattamente le stesse. Ecco le regole offensive:

Quando il comportamento dell'installazione di un'applicazione è impostato su "Installa come sistema", il programma di installazione viene eseguito come sistema [indipendentemente dalla distribuzione all'utente].

Quando un'applicazione viene distribuita a un utente, uno script di rilevamento PowerShell per quell'applicazione viene eseguito come quell'utente [indipendentemente dal fatto che il comportamento dell'installazione sia impostato su "Installa come sistema"].

Ciò significa che un'applicazione con comportamento di installazione "Installa come sistema" e distribuita a una raccolta utenti utilizzerà il contesto di sistema per l'installazione, ma il contesto utente per il rilevamento.

Qualcuno che scrive script di rilevamento per applicazioni in cui il comportamento dell'installazione è "Installa come sistema" dovrebbe fare attenzione a evitare di fare affidamento su qualsiasi parte dell'ambiente che cambia tra il sistema e il contesto dell'utente. In caso contrario, il rilevamento di un'applicazione distribuita in una raccolta di sistemi potrebbe avere esito positivo mentre il rilevamento della stessa applicazione distribuita in una raccolta di utenti non riesce.

copione

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

+1 per una solida domanda e risposta SCCM. Spero che la comunità SCCM qui cresca in quanto è davvero l'unica cosa che tengo d'occhio (abbonamento e-mail per i tag.) Qui, ho un rappresentante extra come motivazione per continuare a venire.
MDMoore313,

2
Grazie @BigHomie. Sto filtrando anche per SCCM ... ma mi manca un sacco perché non c'è modo pratico per ottenere quel flusso filtrato sul cellulare .
alx9r,

2
Ottima domanda SCCM! Unisciti a @BigHomie e I - custodi del tag [sccm]. Ci sono letteralmente un paio di noi.

Darn Skippy, @kce ha le domande migliori anche da questo lato del tag Windows.
MDMoore313,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.