AppEnforce.log是否确实logging了用于安装的上下文不正确?

我有一个具有以下属性的部署types:

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

这是很奇怪的,因为我select了“为系统安装”。

谷歌search显示一些猜测logging是不正确的:

为什么它的价值,我注意到,appenforce.log似乎总是在用户上下文中说,即使它没有。

我发现了一些其他类似的评论,但没有find任何明确的参考。 这给我留下了以下问题:

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

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

考试

我创build了一个具有以下属性的部署types:

 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创build一个名为script-install-test-YYYY-MM-DD__HH-MM-SS.log的日志文件。 该脚本是在这篇文章的结尾。

然后,我部署了该部署types,并观看了AppEnforce.logscript-install-test-X.log

结果

我在AppEnforce.logfind以下条目:

执行命令行:“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安装程序技术的testing。 但是,鉴于脚本安装程序技术的上下文有时是错误的,写入AppEnforce.log的上下文可能被认为对于所有的部署types都是不可靠的,而不考虑技术。

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