2012-02-06 41 views
13

這裏是我的配置: enter image description here無法獲得基本的PowerShell腳本隊城內運行

在生成日誌,我只看到了前兩行的輸出,然後「工藝與代碼0退出」這個構建步驟的最後一個輸出。

我試圖在SYSTEM帳戶中構建服務器打開終端(使用PsTools),由於小組市被配置爲下運行所述帳戶。然後,我創建了內容相同的Test.ps1文件並運行,就像團隊市的一個命令:

[Step 1/4] Starting: C:\Windows\system32\cmd.exe /c C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NonInteractive -Command - <C:\TeamCity\buildAgent\temp\buildTmp\powershell5129275380148486045.ps1 && exit /b %ERRORLEVEL% 

(除路徑名爲.ps1文件和cmd.exe的起始部分,當然) 。我看到了兩條第一條線的輸出,然後終端突然消失了!

哪兒了我搞錯了嗎?順便說一句,我是Powershell的新手。

+0

你有沒有設置執行策略,讓你的腳本? – ccellar 2012-02-06 19:10:41

+1

我選擇了「使用命令參數將腳本放入Powershell標準輸入」以避免這種情況。此外,如果它可以運行前兩行,我認爲權限是好的,還是我需要額外的權限來運行條件邏輯?這將是相當瘋狂的:P – 2012-02-06 19:18:56

+1

我沒有這個工具的上下文,但我不知道它是否有多行stdin的問題?嘗試用以下代碼替換條件(單行程),以查看是否得到不同的結果:if(「1」-eq「1」){write-host「test」} else {write-host「else test」} – 2012-02-07 00:23:37

回答

18

的PowerShell命令標準輸入選項周圍像那多的命令一些怪事。以下表格

你的腳本將工作:

write-host "test" 
write-host "test2" 
if("1" -eq "1"){write-host "test3 in if"} else {write-host "test4 in else"} 

理想的方法是使用的TeamCity的Script : File選項,將運行指定使用-File參數PowerShell中的腳本。

如果您不想擁有文件並擁有VCS,請在當前設置中將Script Execution Mode更改爲Execute .ps1 file with -File argument

+0

你是對的,如果'if-else'子句是單行的,它就可以工作。不知道這是否也發生在Powershell 2.0?無論如何,由於代碼的可讀性是優先的,我決定遵循你的第二個建議(這意味着打開SYSTEM帳戶下的終端,並運行以下命令:1)'powershell' 2)'Set-ExecutionPolicy RemoteSigned' 3)'exit' ) – 2012-02-07 14:33:23

+2

@dario_ramos - 發生在powershell 3.0 CTP :) – manojlds 2012-02-08 04:37:32

+0

請注意,您可以使用「;」在一行中分隔多個語句。 – Dunc 2012-09-06 10:24:11

1

你可以嘗試把支架在同一行。如果打開塊。

即,

If ('1' -eq '1') { 
    ... 
} 
Else { 
    ... 
} 

這就是你使用PowerShell看到常用的造型,顯然,把括號放在下一行可能會導致問題。

3

我有這個問題與TeamCity的內嵌PowerShell腳本(右直到當前版本7.1.3)。我發現問題是製表符而不是多行語句。嘗試用空格替換製表符(仍然保持多行),腳本應該運行良好。

+0

完美的有完全相同的問題。討厭標籤:) – 2014-06-19 09:36:45

+0

與標籤問題同上。它導致該步驟掛起 – 2014-10-20 13:34:12