2012-02-06 25 views
13

Dưới đây là cấu hình của tôi: enter image description hereKhông thể có được kịch bản cơ bản Powershell chạy bên Đội bóng thành phố

Trên build log, tôi chỉ nhìn thấy đầu ra của hai dòng đầu tiên, và sau đó "Quá trình thoát với mã 0" như đầu ra cuối cùng của bước xây dựng này.

Tôi đã thử mở một thiết bị đầu cuối trong máy chủ xây dựng trong tài khoản SYSTEM (sử dụng PsTools), vì Team City được định cấu hình để chạy theo tài khoản được cho biết. Sau đó, tôi đã tạo ra một tập tin Test.ps1 với cùng một nội dung và chạy một lệnh giống như Đội bóng thành phố:

[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% 

(trừ các đường dẫn đến file .ps1 và phần ban đầu cmd.exe, tất nhiên) . Tôi thấy đầu ra của hai dòng đầu tiên, và sau đó thiết bị đầu cuối biến mất đột ngột!

Tôi đã nhầm lẫn ở đâu? Tôi mới đến Powershell, nhân tiện.

+0

Bạn đã đặt Chính sách thực thi để cho phép tập lệnh của mình chưa? – ccellar

+1

Tôi đã chọn "Đặt tập lệnh vào Powershell stdin với đối số -Command" để tránh điều đó. Bên cạnh đó, nếu nó có thể chạy hai dòng đầu tiên, tôi nghĩ rằng các điều khoản là OK, hoặc tôi có cần thêm quyền để chạy logic có điều kiện không? Điều đó sẽ khá điên rồ: P –

+1

Tôi không có bối cảnh cho công cụ này, nhưng tôi tự hỏi nếu nó có vấn đề với stdin đa cấp? Hãy thử thay thế điều kiện bằng (sau một lớp lót) để xem bạn có nhận được kết quả khác không: nếu ("1" -eq "1") {write-host "test"} khác {write-host "else test"} –

Trả lời

18

Tùy chọn lệnh stdin của Powershell có một số điểm kỳ lạ xung quanh các lệnh đa dòng như thế.

Bạn kịch bản theo hình thức sau đây sẽ làm việc:

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

Cách lý tưởng sẽ được sử dụng các tùy chọn trong Script : File TeamCity mà sẽ sẽ chạy kịch bản bạn chỉ định bằng cách sử dụng -File tham số để Powershell.

Nếu bạn không muốn có tệp và có VCS, trong thiết lập hiện tại, hãy thay đổi Script Execution Mode thành Execute .ps1 file with -File argument.

+0

Bạn nói đúng, nếu mệnh đề 'if-else' là một lớp lót, nó hoạt động. Tự hỏi liệu điều này cũng xảy ra với Powershell 2.0?Dù sao, vì khả năng đọc mã là ưu tiên, tôi quyết định làm theo gợi ý thứ hai của bạn (có nghĩa là mở một terminal trong tài khoản SYSTEM và chạy các lệnh sau: 1) 'powershell' 2)' Set-ExecutionPolicy RemoteSigned' 3) 'exit') –

+2

@dario_ramos - Xảy ra tối đa powershell 3.0 CTP :) – manojlds

+0

Lưu ý rằng bạn có thể sử dụng ";" để phân tách nhiều câu lệnh trên một dòng. – Dunc

1

Bạn có thể thử đặt dấu ngoặc nhọn mở khối trên cùng dòng với If.

Tức là,

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

Đó là phong cách thường thấy với Powershell, và rõ ràng, đưa niềng răng trên dòng tiếp theo có thể gây ra vấn đề.

3

Tôi đã gặp sự cố này với tập lệnh PowerShell nội dòng với TeamCity (phải cho đến phiên bản 7.1.3 hiện tại). Tôi đã tìm thấy vấn đề là ký tự tab chứ không phải là câu lệnh nhiều dòng. Hãy thử thay thế các ký tự tab bằng dấu cách (trong khi vẫn còn nhiều dòng) và tập lệnh sẽ chạy tốt.

+0

Hoàn hảo có cùng vấn đề chính xác. Các tab thù ghét :) –

+0

Ditto với sự cố tab. Nó gây ra các bước để treo –

Các vấn đề liên quan