Установка 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. Однако, я вычеркнул это прежде по двум причинам:

  1. LCM работает под учетной записью NT AUTHORITY\SYSTEM и поэтому является администратором и
  2. Потому что я предоставил учетные данные локального администратора Package ресурс уже нравится

(который не работал):

Package InstallHpcHeadNode
{
    Ensure = "Present"
    Name = $HpcPackName
    ProductId = ""
    Path = $HpcPackSourcePath
    Arguments = $Arguments
    Credential = (Get-Credential)
}

Но это была ошибка. В документации Credential говорится:

Предоставляет доступ к пакету из удаленного источника. Это свойство не используется для установки пакета.

который я признаю, я упустил из виду. Я должен был вместо этого использовать PsDscRunAsCredential свойство для принудительной установки с использованием предоставленных учетных данных. До сих пор не знаю, почему установщик не работает под NT AUTHORITY\SYSTEM.

Другие вопросы по тегам