Мне нужно запустить исполняемый файл от имени конкретного пользователя во время задачи сборки в Azure Конвейеры. Чтобы определить, потерпеть ли неудачу сборку, мне нужно прочитать код завершения этого процесса.
Я не могу запустить скрипт из явно административного сеанса.
Когда я рассматриваю дескриптор процесса, используя код ниже, код выхода всегда пуст. Я уверен, что исполняемый файл возвращает коды выхода (он был написан собственными силами).
В дополнение к приведенному ниже коду я также попытался использовать $ LASTEXITCODE, но он не будет установлен, пока я не запустлю исполняемый файл напрямую (в отличие от использования Start-Process).
Есть ли способ просмотреть код завершения этого процесса?
$process = Start-Process -FilePath $pathToExe -ArgumentList $argsString -Credential $credential -PassThru
# I tried waiting like this as well
#while ($process.HasExited -ne $true) {
# Start-Sleep -Seconds 5
#}
$process.WaitForExit()
Write-Host "Process exit code: $($process.ExitCode)"
Подход, аналогичный нижеприведенный может использоваться для доступа к коду выхода процесса, запущенного одним пользователем в контексте другого, но для этого требуется сеанс администратора.
$scriptBlock = {
param($exePath, $exeArgs)
$process = Start-Process -FilePath $exePath -ArgumentList $exeArgs -PassThru
$process.WaitForExit()
return $process.ExitCode
}
$runAsUserSession = New-PSSession -Credential $credential
$exitCode = Invoke-Command -ScriptBlock $scriptBlock -ArgumentList @($pathToExe, $argsString) -Session $runAsUserSession
Write-Host "Process exit code: $exitCode"