Powershell使用call运算符启动进程并传递自定义凭据

时间:2015-12-11 11:17:42

标签: powershell octopus-deploy

我正在尝试使用Octopus部署执行DbUp应用程序。

说明使用这个简单的脚本:

& .\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,因为没有对数据库进行任何更改。

有没有办法使用call operator(&。\ DbUp.exe)启动进程并传递自定义凭据?如果没有,那么Octopus不能从控制台应用程序中选择输出的原因是什么?

1 个答案:

答案 0 :(得分:0)

powershell用户上下文与运行触手服务的用户相关联,因此该服务可以是管理员并具有数据库连接权限。与启动进程一起使用的-NoNewWindow标志应将输出重定向到同一会话。