Arrays 将PowerShell阵列传递回TFS生成模板
我拼凑了一个管道,如果所述文件符合规定的模式,它将返回文件列表及其路径:Arrays 将PowerShell阵列传递回TFS生成模板,arrays,powershell,tfs,tfsbuild,Arrays,Powershell,Tfs,Tfsbuild,我拼凑了一个管道,如果所述文件符合规定的模式,它将返回文件列表及其路径: Param ($dropDir) $MatchingScripts = Get-ChildItem $dropDir\*.sql -Recurse | Select-String -pattern \*ONEFISH\*,\*TWOFISH\*,\*REDFISH\* | group path | Foreach-Object {$_.Name} | Out-File D:\log
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
这里有一个参数,每次我都会输入动态命名的drop路径并搜索该路径。然后,目标是将$MatchingScripts
数组返回到构建模板,并将数组放入ForEach
循环中,该循环将在自定义工具上调用进程,该工具将清除每个\path\file\并替换所述令牌值模式
问题:我无法从PowerShell将该阵列反馈给团队构建。我已经尝试将脚本包含在.ps1中,并使用一个结束符返回$MatchingScripts
…但是在构建模板中,没有任何东西能够到达预定义的IEnumerable
中的同名“MatchingScripts”
我仍然试图让TFSBuildExtensions InvokePowerShellCommand活动也为我这样做,但问题是必须克服类型转换(PSOBject到字符串数组)
它们的关键点是,我必须发送此数组的工具需要由字符串组成。如果是我,我会直接从PowerShell循环并调用您的自定义工具,而不是尝试将数据传递回WF并从那里执行操作。以下是我们用来返回值的工作: 由于我们通过管道输出到日志的内容是干净的(只有文件和路径),因此我们使用VB表达式通过分配活动将日志读回字符串数组
MatchingScripts = File.ReadAllLines("D:\logging\scrubfiles_" + BuildDetail.BuildNumber.ToString() + ".txt")
这里有一点连接,因为我们后来选择根据它运行的“构建”对每个日志进行个性化。不管怎样,这是一种享受
这个故事的寓意是:如果您想从PowerShell/InvokeProcess返回除整数值以外的任何值,准备好编写/找到一个定制的活动或者想出一些其他的工作可以直接反馈到工作流中。我没有考虑这一点的唯一原因是因为我们已经花了很多时间在Windows工作流构建模板活动的基础上构建其余的阶段和部署工作流。不过,展望未来,我认为你的建议更可取。