В каком контексте запускаются сценарии обнаружения SCCM Powershell?

11

Наконец-то я успешно использовал сценарии обнаружения PowerShell на клиентах с AllSignedполитикой выполнения. (подсказка: он начал работать после установки последнего пакета обновления и использования обходного пути Адама Мельцера .)

Теперь, когда практично использовать сценарии PowerShell для обнаружения приложений, меня удивляют следующие вещи:

  1. В каком контексте клиент SCCM запускает сценарии обнаружения PowerShell? Система? Пользователь?
  2. Зависит ли контекст от того, выбираете ли вы «Установить для пользователя» или «Установить для системы» в Типе развертывания?

Документация по этой теме довольно скудная. Лучший ресурс, который я нашел для сценариев обнаружения SCCM PowerShell, - это сообщение в блоге Kloud , однако в нем ничего не говорится о контексте.

alx9r
источник

Ответы:

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.

Несоответствующие контексты (Осторожно!)

Джейсон Сэндис задокументировал аналогичный тест правил для контекста установки. Если вы внимательно прочитаете этот пост, вы можете заметить, что правила для контекста установки и контекста сценария обнаружения не совсем совпадают. Вот оскорбительные правила:

Когда поведение установки приложения установлено на «Установить как систему», программа установки запускается как система [независимо от развертывания для пользователя].

Когда приложение развертывается для пользователя, сценарий обнаружения 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)
}
alx9r
источник
+1 за твердый вопрос и ответ по SCCM. Я действительно надеюсь, что сообщество SCCM здесь растет, потому что это единственное, на что я обращаю внимание (подписка на рассылку тегов по электронной почте). Здесь есть несколько дополнительных представителей в качестве мотивации, чтобы держать их в курсе.
MDMoore313
2
Спасибо @ BigHomie. Я тоже фильтрую для SCCM ... но я скучаю по куче, потому что нет практического способа получить этот отфильтрованный поток на мобильном телефоне .
alx9r
2
Отличный вопрос по SCCM! Присоединяйтесь к @BigHomie и я - хранители тега [sccm]. Есть буквально пара из нас.
Чёрт Скиппи, у @kce есть лучшие вопросы и с этой стороны тега Windows.
MDMoore313