2012-08-08 15 views
0

我有一個TFS 2010版本,它調用了部署的powershell腳本。我已經爲構建腳本定義了幾個參數,並且這些參數工作得很好。它們由構建使用,並且還包含在通過InvokeProcess控件的Arguments屬性傳遞給Powershell的參數中。TFSBuild將參數中的數組包含到powershell中

我現在有PowerShell腳本部署到服務器的數目可變的要求,所以我想,通過服務器的ID從TFS參數列表上。

在構建定義,我已經宣佈了一個名爲字符串[]類型的TargetServers新的說法。在執行構建之前,我已經從「構建過程參數」對話框中填充了此信息。

我已經設置了InvokeProcess控制「Powershell的」的FileName屬性和參數屬性,如下所示:

String.Format(" ""& '{0}' '{1}' '{2}' '{3}' '{4}' '{5}' '{6}' '{7}' '{8}' '{9}' "" ", DeploymentScriptFileName, IO.Path.GetDirectoryName(DeploymentScriptFileName), "ExecuteBizTalkAppMSI.ps1", MSIFileName, BTDFFilename, TargetServerPath, TargetServers, ServerDeploymentFolder, InstallFolder, HostInstanceFilter, ApplicationName) 

我的問題是,TargetServers參數傳遞給PowerShell是簡單地System.String [ ]。

從生成日誌,我可以看到調用過程控制的輸出如下:

Powershell "& 'C:\Builds\3\x.Int.MIS.Deployment\CopyDeployScriptThenExecute.ps1' 
'C:\Builds\3\\x.Int.MIS.Deployment' 'ExecuteBizTalkAppMSI.ps1' 
'x.Int.MIS-3.0.0.msi' 'x.Int.MIS.Deployment.btdfproj' 
'\\d-vasbiz01\BizTalkDeployment' 'System.String[]' 'c:\BizTalkDeployment' 
'c:\Program Files (x86)\x.Int.MIS for BizTalk 2010\3.0' 'BTSSvc*MIS*' " 

任何人都可以請告知如何傳遞數組?

回答

1

爲用逗號分隔的字符串:

PS> function foo([string[]]$x){$x} 
PS> foo a,2,3 
a 
2 
3 

如果你願意,你可以把周圍的各個項目的報價,但你並不需要,除非它們包含的語法保留空格或其他字符。

+0

感謝您回答Powershell問題的一面。我現在需要知道如何讓TFS顯示數組逗號分隔的內容。 – 2012-08-08 10:01:38

+0

'string.Join(「,」,TargetServers.Select(s =>「'」+ s +「'」))'也許? – Joey 2012-08-08 10:08:48

+0

我得到一個編譯錯誤。我必須暫時對服務器進行硬編碼,然後當我有更多時間時再回來。感謝您的嘗試。 – 2012-08-08 10:52:30

相關問題