我有以下(部分)脚本,它是从TeamCity执行的。
try
{
$result = Invoke-Command -Session $session –ScriptBlock {
Param
(
[String]
$serviceName
)
Start-Process "C:\<some_path>\$serviceName\NServiceBus.Host.exe" "/install /serviceName:$serviceName /displayName:$serviceName" -NoNewWindow -Wait
} -ArgumentList $service
}
catch
{
$errorMessage = $_.Exception.Message
Write-Error "ERROR: NServiceBus.Host service installation failed with exception '$errorMessage'"
}
问题是没有输出写入控制台,因此,无论Invoke-Command
cmdlet的脚本块是否成功,TeamCity都将通过构建步骤。
当我在其中一个目标服务器上本地运行Start-Process
cmdlet时,我得到以下输出(这是我期望在使用Invoke-Command
调用cmdlet时返回的内容):
运行事务安装。
开始安装的安装阶段。安装服务 ...服务已成功 安装。在日志中创建EventLog源 应用...
安装阶段成功完成,提交阶段为 开始。
提交阶段已成功完成。
已完成交易安装。
一种解决方法是使用-Redirectxx <some_log_file>
上的Start-Process
开关,读取日志文件并根据其内容执行操作。但是,如果有可能,我真的想避免这种情况。
我正在使用Powershell版本5.
答案 0 :(得分:1)
您可以使用Start-Process -PassThru
参数
-PassThru
:
返回cmdlet启动的每个进程的进程对象。默认情况下,Start-Process
不会生成任何输出。