[英]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.