在我们公司,我们使用TFS 2017(更新1)来构建和发布我们的产品。发布部分由几个步骤组成,包括执行一些Powershell脚本。
这是我配置PS步骤的方法。
我注意到powershell脚本的输出在执行时不是实时写入的,而是在PS任务结束时一起写的。这对于长时间运行的脚本非常烦人,因为我们无法看到任务的实时进度,但我们必须等待任务完成以查看结果。
我写了一些简单的PS脚本来调试这个问题,但是既没有使用write-host
(这根本不写任何内容,即使在任务的最后也没有),也没有使用write-output
或{{1允许我编写实时输出。
这是我尝试过的一个示例脚本,但没有成功。
write-verbose -verbose
你有没有发现自己处于这种状况?
此致
答案 0 :(得分:2)
我可以根据我的测试重现此问题<{1}}任务不支持实时输出。
PowerShell on Target Machines
或Write-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
)。