Duplicate Question and Answer I Posted, ở đây cho hậu thế khi được bỏ phiếu. Điểm khác biệt chính là câu hỏi này bị ràng buộc là OOTB và câu trả lời tự của tôi nằm trong giới hạn đó.
Câu hỏi
Powershell dường như không có một cách dễ dàng để kích hoạt nó với một lệnh tùy ý và sau đó bong bóng lên phân tích cú pháp và thực hiện sai sót trong một cách mà interoperates một cách chính xác với người gọi mà không phải là PowerShell - ví dụ, cmd.exe
, TeamCity v.v.
Câu hỏi của tôi rất đơn giản. Cách tốt nhất cho tôi với OOTB MSBuild v4 và PowerShell v3 là gì? tinh chỉnh nó và/hoặc trở thành nó là người duy trì/cha mẹ ") để chạy một lệnh (hoặc một đoạn mã nhỏ, hoặc (phổ biến nhất) một lời gọi của một tập lệnh .ps1
.
<Exec
IgnoreStandardErrorWarningFormat="true"
Command="PowerShell "$(ThingToDo)"" />
Đó buồn bã không hoạt động: -
- nếu
ThingToDo
thất bại trong việc phân tích, nó không âm thầm
- nếu
ThingToDo
là một invocation kịch bản đó không tồn tại, nó không
- nếu bạn muốn truyền một
ERRORLEVEL
dựa .cmd
kết quả, nó được lông
- nếu bạn muốn nhúng
"
trích dẫn trong số ThingToDo
, nó sẽ không hoạt động
Vì vậy, cách chứng minh bằng cách nào để chạy PowerShell từ MSBuild được cho là? Có điều gì tôi có thể PsGet để làm mọi thứ OK?
trả lời
Weeeeelll, bạn có thể sử dụng một cái gì đó dài hơi như thế này cho đến khi bạn tìm thấy một cách tốt hơn: -
<PropertyGroup>
<__PsInvokeCommand>powershell "Invoke-Command</__PsInvokeCommand>
<__BlockBegin>-ScriptBlock { $errorActionPreference='Stop';</__BlockBegin>
<__BlockEnd>; exit $LASTEXITCODE }</__BlockEnd>
<_PsCmdStart>$(__PsInvokeCommand) $(__BlockBegin)</_PsCmdStart>
<_PsCmdEnd>$(__BlockEnd)"</_PsCmdEnd>
</PropertyGroup>
Và sau đó 'tất cả' bạn cần phải làm là:
<Exec
IgnoreStandardErrorWarningFormat="true"
Command="$(_PsCmdStart)$(ThingToDo)$(_PsCmdEnd)" />
Tính năng mua lại đơn này (trừ bẫy tất cả các loại lỗi tôi có thể nghĩ đến), là nó hoạt động OOTB với bất kỳ phiên bản PowerShell nào và bất kỳ phiên bản MSBuild nào.
Tôi sẽ lấy áo khoác.
Nguồn
2012-10-10 10:48:17
Tôi muốn sử dụng bài đăng trên blog làm khởi động. Chúng tôi đang làm việc với một chuyên gia tư vấn của Microsoft và đó là bài đăng mà anh ấy đã giới thiệu cho chúng tôi. Tôi đã thử nhiệm vụ Powershell MSBuild trên codeplex, và nó sai sót trên một kịch bản Powershell của tôi hoạt động trong tác vụ của Bart De Smet. –