Назад | Перейти на главную страницу

Действительно ли AppEnforce.log неправильно регистрирует контекст, используемый для установки?

У меня есть тип развертывания со следующими атрибутами:

Technology: MSI
Installation behavior: Install for system
Logon requirement: Whether or not a user is logged on
Installation program visibility: Hidden

когда msiexec выполняется клиентом, в журнале AppEnforce.log отображается следующая запись:

Выполнение командной строки: "C: \ WINDOWS \ system32 \ msiexec.exe" / i "AppleApplicationSupport.msi" / qn с контекст пользователя

Это странно, поскольку я выбрал «Установить для системы».

Поиск в Google показывает некоторые предположения что ведение журнала неверно:

что бы это ни стоило, я заметил, что appenforce.log, кажется, всегда говорит его в контексте пользователя, даже если это не так.

Я нашел еще несколько похожих комментариев, но не нашел окончательной ссылки. Это оставляет мне следующие вопросы:

Действительно ли AppEnforce.log регистрирует контекст как пользователь, даже если он выполняется как система?

TL; DR: AppEnforce.log действительно неправильно регистрирует контекст (по крайней мере, для технологии «Script Installer»).

Тест

Я создал тип развертывания со следующими атрибутами:

Technology: Script Installer
Installation behavior: Install for system
Logon requirement: Whether or not a user is logged on
Installation program visibility: Hidden
Installation program: powershell .\Install-Application.ps1

Install-Application.ps1 создает файл журнала с именем script-install-test-YYYY-MM-DD__HH-MM-SS.log. Этот сценарий находится в конце этой публикации.

Затем я развернул этот тип развертывания и посмотрел AppEnforce.log и script-install-test-X.log.

Полученные результаты

Я нашел следующую запись в AppEnforce.log:

Выполнение командной строки: «C: \ WINDOWS \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe». \ Install-Application.ps1 с контекстом пользователя

Через несколько секунд после этого script-install-test-X.log был записан в папку script-install-test-SYSTEM. В SYSTEM суффикс указывает, что сценарий был запущен как SYSTEM.

Вывод

Для технологии «установщик сценариев» контекст, записанный в AppEnforce.log сообщения стиля

Выполнение командной строки: «C: \ WINDOWS \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe». \ Install-Application.ps1 с контекстом пользователя

может быть неправильно записан как «пользовательский контекст», даже если командная строка выполняется как системный контекст.

Что насчет технологии установщика MSI?

Я не проводил тест для MSI Installer Technology. Однако, учитывая, что контекст иногда неверен для технологии установщика скриптов, контекст, записанный в AppEnforce.log вероятно, следует рассматривать как ненадежный для всех типов развертывания, независимо от технологии.

Установить-Application.ps1

function Write-EnvToLog
{
    $appName = 'script-install-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 ) { "Complete!" }
    [System.Environment]::Exit(0)
}
catch
{
    [System.Environment]::Exit(1000)
}