簡體   English   中英

將PowerShell數組傳遞回TFS構建模板

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM