TL; DR: AppEnforce.log de fato registra o contexto incorretamente (pelo menos para a tecnologia "Script Installer").
O teste
Eu criei um tipo de implantação com os seguintes atributos:
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
cria um arquivo de log chamado script-install-test-YYYY-MM-DD__HH-MM-SS.log
. Esse script está no final deste post.
Em seguida, implantei esse tipo de implantação e assisti AppEnforce.log
e script-install-test-X.log
.
Resultados
Eu encontrei a seguinte entrada em AppEnforce.log
:
Executing Command line: "C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe" .\Install-Application.ps1 with user context
Dentro de segundos, o script-install-test-X.log
foi gravado na pasta script-install-test-SYSTEM
. O sufixo SYSTEM
indica que o script foi executado como SYSTEM.
Conclusão
Para a tecnologia "instalador de script", o contexto é gravado em AppEnforce.log
messages do estilo
Executing Command line: "C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe" .\Install-Application.ps1 with user context
pode ser escrito incorretamente como "contexto do usuário", mesmo quando a linha de comando é executada como contexto do sistema.
E a tecnologia de instalação MSI?
Eu não realizei o teste para a tecnologia MSI Installer. No entanto, considerando que o contexto às vezes está errado para a Tecnologia do Instalador de Script, o contexto gravado em AppEnforce.log
provavelmente deve ser considerado não confiável para todos os tipos de implantação, independentemente da tecnologia.
Install-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)
}