[英]Passing a PowerShell Array back to TFS build Template
我拼凑了一个管道,如果所述文件与指定的模式匹配,则该管道返回文件及其路径的列表:
Param ($dropDir)
$MatchingScripts = Get-ChildItem $dropDir\*.sql -Recurse
| Select-String -pattern \*ONEFISH\*,\*TWOFISH\*,\*REDFISH\*
| group path
| Foreach-Object {$_.Name}
| Out-File D:\logging\scrubfiles.log
return $MatchingScripts
因此,这里有一个参数,我每次都会输入动态命名的放置路径并向下搜索该路径。 然后,目标是将$MatchingScripts
数组返回到构建模板,并将该数组放入ForEach<string>
循环中,该循环将在定制工具上调用InvokeProcess,该定制工具将清理每个\\ path \\ file \\并替换所述标记值模式。
问题:我无法从PowerShell中将该阵列反馈给团队构建。 我试过将脚本与结束return $MatchingScripts
一起包含在.ps1中...但是在构建模板中没有任何东西以相同的名称“ MatchingScripts”到达预定义的IEnumerable<String>
。
我仍在尝试通过TFSBuildExtensions InvokePowerShellCommand活动来为我执行此操作,但是问题是必须克服类型转换(PSOBject到字符串数组)的问题。
他们的关键是我必须通过包含字符串的数组来发送此数组的工具。
如果是我,我将循环浏览并直接从PowerShell调用您的自定义工具,而不是尝试将数据传递回WF并从那里进行操作。
这是我们用来返回值的解决方法:
由于我们传递到日志的内容是干净的(只是文件和路径),因此我们使用VB表达式通过Assign活动将日志读回到字符串数组中。
MatchingScripts = File.ReadAllLines("D:\logging\scrubfiles_" + BuildDetail.BuildNumber.ToString() + ".txt")
那里有一点串联,因为我们后来选择根据运行的“构建”来个性化每个日志。 无论如何,它确实起到了治疗作用!
故事的寓意:了解如果您想从PowerShell / InvokeProcess返回除整数值以外的任何内容,请准备编写/查找自定义活动,或者提出一些其他解决方法,这些解决方法可以直接反馈到Workflow中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.