Процесс запуска Powershell с использованием оператора вызова и передачей пользовательских учетных данных

Я пытаюсь выполнить приложение DbUp, используя развертывание Octopus.

Инструкция говорит использовать этот простой скрипт:

& .\DbUp.exe | Write-Host

Но проблема в том, что я не мог найти способ передать пользовательские учетные данные для запуска процесса. Я попытался напрямую использовать объект Process:

"DbUp Deployment Script starting." | Write-Host
$pinfo.Username = $OctopusParameters['serviceCustomAccountName']
$pinfo.Domain = "DOMAIN"
$pinfo.Password = (ConvertTo-SecureString -String $OctopusParameters['serviceCustomAccountPassword'] -AsPlainText -Force)
$pinfo.FileName = "C:\DbUp.exe"
$pinfo.RedirectStandardError = $true
$pinfo.RedirectStandardOutput = $true
$pinfo.UseShellExecute = $false
$pinfo.Arguments = ""
$p = New-Object System.Diagnostics.Process
$p.StartInfo = $pinfo
$p.Start() 
$p.WaitForExit()
$p.StandardOutput.ReadToEnd() | Write-Host
$p.StandardError.ReadToEnd() | Write-Host
"DbUp Deployment Script finished." | Write-Host

Но этот подход приводит к тому, что StandardOutput не передается в журнал Octopus:

DbUp Deployment Script starting.
True
DbUp Deployment Script finished.

Похоже, что DbUp.exe вообще не выполняется, потому что к базе данных не применяются никакие изменения.

Есть ли способ запустить процесс с помощью оператора вызова (& .\DbUp.exe) и передачи пользовательских учетных данных? Если нет, то по какой причине Octopus не выбирает консольное приложение для вывода?


person Miłosz Wierzbicki    schedule 11.12.2015    source источник
comment
@sodawillow: этот не перенаправляет вывод консоли на хост даже при использовании Start-Process -FilePath "C:\DbUp.exe" -Credential ($creds) | Write-Host   -  person Miłosz Wierzbicki    schedule 11.12.2015
comment
Это работает ? Start-Process -FilePath "path" -ArgumentList "arguments" -Credential (Get-Credential) -RedirectStandardOutput "c:\test.txt" И если у вас есть логи, зачем вам перенаправлять stdoutв консоль?   -  person sodawillow    schedule 11.12.2015
comment
При использовании Octopus файл не создается, он создается при запуске скрипта из ISE. Мне нужно перенаправить на консоль, чтобы при необходимости развертывание Octopus не удалось. Все печатается, когда я использую оператор вызова.   -  person Miłosz Wierzbicki    schedule 11.12.2015
comment
Кажется, что все 3 метода выводят вывод в Octopus, когда я не передаю пользовательские учетные данные. Когда я запускаю ISE под той же учетной записью, что и Octopus, все также распечатывается. По какой-то причине процесс не запускается при использовании Octopus и пользовательской учетной записи...   -  person Miłosz Wierzbicki    schedule 11.12.2015
comment
Почему бы тогда не запустить весь скрипт от имени другого пользователя?   -  person sodawillow    schedule 11.12.2015
comment
Пользователи, запускающие процессы Octopus и DbUp, имеют разные права. Пользователь Octopus не может иметь права на подключение к базе данных.   -  person Miłosz Wierzbicki    schedule 11.12.2015


Ответы (1)


Контекст пользователя powershell связан с пользователем, запускающим службу щупалец, поэтому эта служба может быть администратором и иметь права на подключение к базе данных. Флаг -NoNewWindow, используемый с start-process, должен перенаправлять вывод в тот же сеанс.

person Michael Saxbury    schedule 06.11.2018
comment
Этот парень сказал, что у него все получилось, но ему пришлось использовать еще пару флагов -PassThru -Wait и -NoNewWindow stevefenton.co.uk/2016/09/ - person Michael Saxbury; 06.11.2018
comment
Я не уверен, действительно ли этот ответ отвечает на вопрос ОП или нет, но он спас мою шкуру при попытке выполнить потенциально длительный процесс из шага сценария PowerShell в моем процессе развертывания. Если вы хотите запустить длительный процесс с шага сценария развертывания Octopus и продолжить развертывание, не используйте параметр -NoNewWindow для Start-Process. - person fourpastmidnight; 03.10.2019