Đăng sự kiện xây dựng thực thi PowerShell


85

Có thể thiết lập dự án .NET với sự kiện xây dựng bài đăng để thực thi tập lệnh powershell không? Tôi đang sử dụng tập lệnh này để tạo một số tệp.

Ngoài ra, tôi có thể chuyển cho dù đó là bản dựng gỡ lỗi hay bản phát hành sang tập lệnh. Một ví dụ về điều này sẽ rất tuyệt.


Câu trả lời:


118

Đây là một ví dụ :

Trước hết : bạn phải biết thực tế là PowerShell phải được cấu hình để thực thi các tập lệnh. Dòng sau cho phép PowerShell thực thi các tập lệnh:

Set-ExecutionPolicy RemoteSigned

Đề cập đặc biệt ở đây : nếu bạn đang chạy hệ thống 64bits, bạn phải quan tâm đến thực tế là 'devenv.exe ' tệp thực thi Visual Studio 2010 là một exe 32Bits, vì vậy bạn cần cho phép PowerShell 32 thực thi các tập lệnh.

Khi ở đây, bạn có thể vào thuộc tính dự án của mình và định cấu hình bản dựng bài đăng như được hiển thị ở đây bên dưới (xin lỗi bằng tiếng Pháp):

Đăng xây dựng trong VS 2010

Ví dụ :

Ví dụ về postbuild với powershell

Đây là tệp ' psbuild.ps1', nó tạo ra một ' test.txt' trong đường dẫn đích với tên cấu hình bên trong. Tôi đã đưa ra nhận xét các cách khác nhau để gỡ lỗi tập lệnh postbuild của bạn (hộp thông báo, âm thanh, thông báo trên đầu ra)

param ([string]$config, [string]$target)

#[void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
#[void][System.Windows.Forms.MessageBox]::Show("It works.")
#[Console]::Beep(600, 800)
#Write-Host 'coucou'
set-content $target -Value $config -Force

8
Câu trả lời tốt. Tôi chỉ nói thêm rằng bạn không nên đặt chính sách thực thi thành không hạn chế mà thay vào đó là được thiết kế từ xa. Không hạn chế cho phép bất kỳ tập lệnh nào thực thi, trong khi được thiết kế từ xa yêu cầu các tập lệnh đã tải xuống phải được ký bằng khóa đáng tin cậy.
beefarino

2
Hum nào bạn kiểm tra để tải xuống tệp .PS1 trên ổ Fat32 hay bạn sử dụng cmdline FTP cơ bản để tải tệp .PS1 có "điều khiển từ xa"? nó không phải là một loại "an ninh khói"?
JPBlanc

3
+1 cho đề cập đặc biệt dành cho hệ thống 64bit - Tôi đã phát điên cho đến khi tôi đọc được rằng tôi cũng cần cho phép thực thi trong PowerShell 32bit. Cảm ơn!
Guðmundur H

unfortunatelly không có tập tin hình ảnh: i.stack.imgur.com/gZoPi.png i.stack.imgur.com/VTIRW.png
Andrzej Martyna

7
Nếu bạn sử dụng: c: \ windows \ sysnative \ windowspowershell \ v1.0 \ powershell.exe cho đường dẫn, phiên bản powershell 64 bit sẽ được gọi. % systemroot% \ sysnative là một bí danh đặc biệt để yêu cầu trình chuyển hướng ngừng chuyển hướng và cho phép truy cập thực vào% systemroot% \ system32.
Peter Oehlert

15

lệnh Set-ExecutePolicy sẽ tạm thời thiết lập chính sách thực thi trong phiên hiện tại. Nếu bạn đặt điều này trong powershell và chạy lệnh xây dựng bài trong vs bạn sẽ vẫn không được phép. Vì vậy, hãy đặt trước rồi chạy tập lệnh ps1 của bạn như dưới đây

powershell -ExecutionPolicy Unrestricted $(ProjectDir)Deploy.ps1 -ProjectDir $(ProjectDir) -TargetPath $(TargetPath)

11

Thay vì làm rối tung các cài đặt trên toàn hệ thống và phải phân biệt giữa môi trường 32 và 64 bit, một cách tiếp cận dễ dàng và đáng tin cậy hơn nhiều là chỉ định ExecutionPolicylệnh gọi tới PowerShell, như sau:

C:\Users\xyz>PowerShell -ExecutionPolicy Unrestricted

PS C:\Users\xyz> Get-ExecutionPolicy
Unrestricted

PS C:\Users\xyz> exit

C:\Users\xyz>PowerShell -ExecutionPolicy RemoteSigned

PS C:\Users\xyz> Get-ExecutionPolicy
RemoteSigned

Lưu ý trong đoạn mã trên cách gọi Get-ExecutionPolicy cho bạn biết chế độ hiện tại. Cũng lưu ý cách chế độ này được chỉ định trong lệnh gọi tới PowerShell, có thể được kết hợp với tên tệp tập lệnh:

nội dung test.ps1:

echo ('The current policy is ' + (Get-ExecutionPolicy)).ToString()

Gọi test.ps1 với Unrestrictedchính sách trên hệ thống có tập lệnh bị tắt:

C:\Users\xyz>PowerShell -ExecutionPolicy Unrestricted -file test.ps1
The current policy is Unrestricted

Cũng lưu ý rằng lệnh gọi trên không yêu cầu quyền quản trị, vì vậy nó có thể được gọi trong Bước tạo trước của Visual Studio hoặc tương tự.


9

Trước khi gọi tập lệnh power-shell từ visual studio, hãy đặt ExecutionPolicy thành RemoteSignedtừ cửa sổ power-shell như thế này ...

Set-ExecutionPolicy -Scope CurrentUser;
ExecutionPolicy: RemoteSigned;

sau đó gọi tập lệnh powershell theo cách sau ...

(không cần phải chuyển đường dẫn tệp "powershell.exe" đầy đủ)

powershell.exe $(SolutionDir)Setup.ps1 -SolutionDir $(SolutionDir) -ProjectPath $(ProjectPath)

nhập mô tả hình ảnh ở đây

thì trong script, bạn luôn có thể đọc tham số như thế này ...

param([string]$SolutionDir,
     [string]$ProjectPath);
#Write-Host ($SolutionDir +" Call this script with following aruments");
#Write-Host ($ProjectPath +" Call this script with following aruments");

6

Tôi đã thực hiện nó bằng lệnh dưới đây trong lệnh sau xây dựng chẵn:

PowerShell -NoProfile -ExecutionPolicy unrestricted -file $(SolutionDir)AutomationScript\DBAutomationScript.ps1 -target $(SolutionDir)MUFG.SECMOD.Data\SqlScripts -generatedFileName $(SolutionDir)MUFG.SECMOD.Data\SqlScripts\DeploymentDBScript.sql

Nội dung DBAutomationScript.ps1:

param ([string]$target, [string]$generatedFileName)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.