web-dev-qa-db-ja.com

ビルド後イベント実行PowerShell

ビルド後のイベントで.NETプロジェクトをセットアップして、Powershellスクリプトを実行することは可能ですか?このスクリプトを使用していくつかのファイルを生成しています。

また、デバッグビルドかリリースビルドかをスクリプトに渡すことができます。この例は素晴らしいでしょう。

75
amateur

以下に例を示します。

まず第一に:スクリプトを実行するにはPowerShellを構成する必要があるという事実に注意する必要があります。次の行により、PowerShellでスクリプトを実行できます。

Set-ExecutionPolicy RemoteSigned

特記事項:64ビットシステムを実行している場合は、 'devenv.exe 'Visual Studio 2010実行可能ファイルは32Bits exeであるため、PowerShell 32でスクリプトを実行できるようにする必要があります。

ここで、プロジェクトのプロパティに移動し、(フランス語でごめんなさい)の下にあるようにポストビルドを構成できます。

Post build in VS 2010

例えば ​​:

Example of postbuild with powershell

ファイル 'psbuild.ps1'があります。これは、ターゲットパスに 'test.txt'を作成し、内部に構成名を付けます。ポストビルドスクリプトをデバッグするためのさまざまな方法(メッセージボックス、サウンド、出力のメッセージ)をコメントに入れました

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
111
JPBlanc

コマンドSet-ExecutePolicyは、現在のセッションで一時的に実行ポリシーを設定します。これをpowershellで設定し、vsでpost buildコマンドを実行すると、まだ許可されません。最初に設定してから、次のようなps1スクリプトを実行してください

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

Visual Studioからpower-Shellスクリプトを呼び出す前に、ExecutionPolicyを次のようにpower-ShellウィンドウからRemoteSignedに設定します...

Set-ExecutionPolicy -Scope CurrentUser;
ExecutionPolicy: RemoteSigned;

次に、powershellスクリプトを次の方法で呼び出します...

(完全な「powershell.exe」ファイルパスを渡す必要はありません)

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

enter image description here

次に、スクリプトで、このようなパラメータをいつでも読み取ることができます...

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

システム全体の設定をいじって32ビット環境と64ビット環境を区別する代わりに、多くのより簡単で信頼性の高いアプローチは、PowerShellの呼び出しでExecutionPolicyを指定することです。次のように:

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

上記のコードでは、Get-ExecutionPolicyは、現在のモードを示します。また、PowerShell自体の呼び出しでこのモードがどのように指定されているかに注意してください。これは、スクリプトファイル名と組み合わせることができます。

test.ps1の内容:

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

スクリプトが無効になっているシステムでUnrestrictedポリシーを使用してtest.ps1を呼び出す:

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

また、上記の呼び出しはnotが管理者権限を必要とするため、Visual Studioのビルド前ステップなどで呼び出すことができます。

7
Michael

ビルド後の偶数コマンドで以下のコマンドで作成しました:

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

DBAutomationScript.ps1の内容:

param ([string]$target, [string]$generatedFileName)
5
jnm