Установка exe с PowerShell DSC возвращает код выхода только при запуске через LCM
Я пытаюсь установить программу установки HPC Pack 2012 R2 U3 с помощью PowerShell DSC. Следующий код работает и устанавливает программное обеспечение:
$HpcPackName = "Microsoft HPC Pack 2012 R2 Server Components"
$HpcPackSourcePath = "C:\Temp\HPC2012R2_Update3_Full\setup.exe"
$sqlServer = "EMEAWINQA15"
$Arguments = "-unattend -headNode"
function InstallUsingProcess
{
[CmdletBinding()]
param()
Write-Verbose "HpcPackSourcePath: $HpcPackSourcePath"
Write-Verbose "Arguments: $Arguments"
$startInfo = New-Object System.Diagnostics.ProcessStartInfo
$startInfo.FileName = $HpcPackSourcePath
$startInfo.Arguments = $Arguments
$process = New-Object System.Diagnostics.Process
$process.StartInfo = $startInfo
$exitcode = 0
$process.Start() | Out-Null
$process.WaitForExit()
if($process)
{
$exitCode = $process.ExitCode
Write-Verbose "Exit code: $exitCode"
}
}
InstallUsingProcess -Verbose
Однако, когда я запускаю ту же самую вещь, используя конфигурацию Script DSC, она завершается успешно, но возвращается очень быстро с кодом выхода 10:
Configuration TestHpcInstall
{
Import-DscResource –ModuleName PSDesiredStateConfiguration
Node $AllNodes.Where({$_.Roles -contains 'HpcHeadNode'}).NodeName
{
$HpcPackName = "Microsoft HPC Pack 2012 R2 Server Components"
$HpcPackSourcePath = "C:\Temp\HPC2012R2_Update3_Full\setup.exe"
$sqlServer = "EMEAWINQA15"
$Arguments = "-unattend -headNode"
Script TestInstall
{
GetScript = {
return @{ "Result" = "$true"}
}
TestScript = {
return $false
}
SetScript = {
Write-Verbose "HpcPackSourcePath: $using:HpcPackSourcePath"
Write-Verbose "Arguments: $using:Arguments"
$startInfo = New-Object System.Diagnostics.ProcessStartInfo
$startInfo.FileName = $using:HpcPackSourcePath
$startInfo.Arguments = $using:Arguments
$process = New-Object System.Diagnostics.Process
$process.StartInfo = $startInfo
$exitcode = 0
$process.Start() | Out-Null
$process.WaitForExit()
if($process)
{
$exitCode = $process.ExitCode
Write-Verbose "Exit code: $exitCode"
}
}
}
}
}
TestHpcInstall -ConfigurationData $configData -OutputPath "C:\Temp"
Start-DscConfiguration -ComputerName "EMEAWINQA15" -Path "C:\Temp\" -Verbose -Wait -Force
Это тот же код, используемый Package
ресурс, который завершается неудачно, потому что код ошибки 10 возвращается вместо 0 (что имеет место при успешной установке пакета, как в самом верхнем примере кода). Программа установки не производит никаких выходных данных или файла журнала.
Есть идеи? Я в тупике.
1 ответ
Я нашел проблему. Я думал, что это как-то связано с разрешениями, потому что при нормальном запуске программа выдает запрос на повышение прав UAC. Однако, я вычеркнул это прежде по двум причинам:
- LCM работает под учетной записью NT AUTHORITY\SYSTEM и поэтому является администратором и
- Потому что я предоставил учетные данные локального администратора
Package
ресурс уже нравится
(который не работал):
Package InstallHpcHeadNode
{
Ensure = "Present"
Name = $HpcPackName
ProductId = ""
Path = $HpcPackSourcePath
Arguments = $Arguments
Credential = (Get-Credential)
}
Но это была ошибка. В документации Credential говорится:
Предоставляет доступ к пакету из удаленного источника. Это свойство не используется для установки пакета.
который я признаю, я упустил из виду. Я должен был вместо этого использовать PsDscRunAsCredential
свойство для принудительной установки с использованием предоставленных учетных данных. До сих пор не знаю, почему установщик не работает под NT AUTHORITY\SYSTEM.