AppEnforce.log 是否确实错误地记录了用于安装的上下文?

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用户上下文

这很奇怪,因为我选择了“为系统安装”。

谷歌搜索揭示了一些猜测记录不正确:

不管怎样,我注意到 appenforce.log 似乎总是说它在用户上下文中,即使事实并非如此。

我找到了一些其他类似的评论,但没有找到任何明确的参考。这让我有以下疑问:

即使以系统身份执行,AppEnforce.log 是否真的将上下文记录为用户?

答案1

TL;DR:AppEnforce.log 确实错误地记录了上下文(至少对于“脚本安装程序”技术而言)。

考试

我创建了具有以下属性的部署类型:

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.logscript-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-SYSTEMSYSTEM后缀表示该脚本以 SYSTEM 身份运行。

结论

对于“脚本安装程序”技术,写入AppEnforce.log以下样式的消息的上下文

使用用户上下文执行命令行:“C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe”。\Install-Application.ps1

即使命令行作为系统上下文执行,也可能被错误地写为“用户上下文”。

MSI 安装程序技术怎么样?

我没有针对 MSI 安装程序技术进行测试。但是,考虑到脚本安装程序技术的上下文有时会出错,因此对于所有部署类型(无论使用哪种技术),写入的上下文AppEnforce.log可能都应被视为不可靠的。

安装-应用程序.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)
}

相关内容