在TFS版本执行期间编写实时PowerShell输出

时间:2018-06-06 10:11:36

标签: powershell tfs

在我们公司,我们使用TFS 2017(更新1)来构建和发布我们的产品。发布部分由几个步骤组成,包括执行一些Powershell脚本。

这是我配置PS步骤的方法。

enter image description here

我注意到powershell脚本的输出在执行时不是实时写入的,而是在PS任务结束时一起写的。这对于长时间运行的脚本非常烦人,因为我们无法看到任务的实时进度,但我们必须等待任务完成以查看结果。

我写了一些简单的PS脚本来调试这个问题,但是既没有使用write-host(这根本不写任何内容,即使在任务的最后也没有),也没有使用write-output或{{1允许我编写实时输出。 这是我尝试过的一个示例脚本,但没有成功。

write-verbose -verbose

你有没有发现自己处于这种状况?

此致

1 个答案:

答案 0 :(得分:2)

我可以根据我的测试重现此问题<{1}}任务不支持实时输出

PowerShell on Target MachinesWrite-output只能输出到控制台,但它不是实时的,输出仅在powershell脚本完全执行后显示。

要显示实时输出,您可以使用write-verbose -verbose任务代替Utility:PowerShell任务。

因此,作为一种解决方法,您可以在要运行powershell脚本的目标计算机上部署代理,然后使用运行带有Deploy:PowerShell on Target Machines任务的PowerShell脚本的代理触发发布。

<强>更新

好吧,找到Utility:PowerShell任务的另一个解决方法:

1.为目标计算机设置WinRM,请参阅WinRM configuration

2.将目标PS脚本复制到目标计算机(以下示例中为Utility:PowerShell

3.创建PowerShell脚本以调用D:\TestShare\PStest.ps1在目标计算机上运行目标powershell脚本,请参阅下面的示例:

Powershell.exe

4.添加Param( [string]$computerName = "ICTFS2015.test.com", ) $Username = "domain\usename" $Password = ConvertTo-SecureString "Possword" -AsPlainText -Force $cred = New-Object System.Management.Automation.PSCredential($Username,$password) Invoke-Command -ComputerName $computerName -Credential $cred -ScriptBlock {Invoke-Expression -Command:"powershell.exe /c 'D:\TestShare\PStest.ps1'"} 任务以在PowerShell脚本上方运行。 (您可以登记或运行Utility:PowerShell)。

enter image description here