2013-05-01 95 views
4

我有一個powershell腳本,我試圖通過teamcity運行。該腳本存儲在代碼構建自的git倉庫中。我已經設置的TeamCity運行腳本的腳本文件Teamcity似乎損壞了Powershell腳本

如果我運行從構建一個PowerShell命令行腳本斷絕它運行正常,如果我從TeamCity的運行相同的腳本,我得到這樣的錯誤

[16:04:25][Step 3/3] Get-Date : Cannot bind parameter 'Date'. Cannot convert value "â€「f" to type 
[16:04:25][Step 3/3] "System.DateTime". Error: "The string was not recognized as a valid DateTime. 
[16:04:25][Step 3/3] There is an unknown word starting at index 0." 
[16:04:25][Step 3/3] At line:1 char:26 
[16:04:25][Step 3/3] + Write-Output "$(Get-Date â€「f $timeStampFormat) - Upgrading Deployment: In 
[16:04:25][Step 3/3] progr ... 
[16:04:25][Step 3/3] +       ~~~~ 
[16:04:25][Step 3/3]  + CategoryInfo   : InvalidArgument: (:) [Get-Date], ParameterBindin 
[16:04:25][Step 3/3] gException 
[16:04:25][Step 3/3]  + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerSh 
[16:04:25][Step 3/3] ell.Commands.GetDateCommand 
[16:04:25][Step 3/3] 

爲什麼會發生這種情況?

+1

很難指出問題,但有可能Powershell腳本編碼在進入git repo時發生了改變,從而改變了腳本中的一些字符。你可以嘗試在執行之前輸出導致錯誤的行並查看這些值是什麼? – 2013-05-01 20:24:13

+0

嘗試運行代理上位置的powershell腳本,並檢查編碼,如Muz說的,Git和文件編碼。 – 2013-05-02 08:46:24

回答

3

該解決方案本來應該簡單得多。 teamcity中有一個名爲「腳本執行模式」的選項,一旦腳本開始按預期運行,我就從Put script into PowerShell stdin with "-Command -" arguments更改爲Execute .ps1 script with "-File" argument

0

我遇到了類似的問題,但腳本本身的編碼不是問題,它是腳本的輸出。我使用PowerShell讀取app.config文件,替換文件中的變量,然後將文件寫回原始路徑。該腳本以UTF-8編碼接收app.config,但以USC-2編碼輸出文件。當它從app.config接收到意外字符時,Msbuild會拋出一個錯誤。

該腳本正在使用$updatedConfig > $pathout-file寫速記。我必須用完整命令$updatedConfig | out-file -FilePath $path -encoding utf8替換它以指定輸出編碼。

注意:我成功地使用了上面的簡寫片段,但除了兩個TeamCity構建配置外。我檢查並仔細檢查了原始配置文件是否使用正確的編碼來自源代碼控制,甚至可以使用BOM將文件轉換爲UTF-8。沒有任何工作,除了刪除簡寫語法。