Powershell:在Invoke-Command脚本块

时间:2017-08-03 07:43:50

标签: powershell teamcity nservicebus invoke-command start-process

我有以下(部分)脚本,它是从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.

1 个答案:

答案 0 :(得分:1)

您可以使用Start-Process -PassThru参数

https://docs.microsoft.com/fr-fr/powershell/module/Microsoft.PowerShell.Management/Start-Process?view=powershell-5.1

-PassThru: 返回cmdlet启动的每个进程的进程对象。默认情况下,Start-Process不会生成任何输出。