PowerShellスクリプトを実行するビルド後のイベントを使用して.NETプロジェクトをセットアップすることは可能ですか?このスクリプトを使用していくつかのファイルを生成しています。
また、デバッグビルドかリリースビルドかをスクリプトに渡すことはできますか。この例は素晴らしいでしょう。
PowerShellスクリプトを実行するビルド後のイベントを使用して.NETプロジェクトをセットアップすることは可能ですか?このスクリプトを使用していくつかのファイルを生成しています。
また、デバッグビルドかリリースビルドかをスクリプトに渡すことはできますか。この例は素晴らしいでしょう。
回答:
ここに例があります:
まず第一に、スクリプトを実行するようにPowerShellを構成する必要があるという事実に注意する必要があります。次の行では、PowerShellでスクリプトを実行できます。
Set-ExecutionPolicy RemoteSigned
ここでの特記事項:64ビットシステムを実行している場合は、'devenv.exe ' Visual Studio 2010実行可能ファイルが32ビットexeであることに注意する必要があるため、PowerShell32でスクリプトを実行できるようにする必要があります。
ここで、プロジェクトのプロパティに移動し、以下に示すようにビルド後を構成できます(フランス語で申し訳ありません):
例えば :
これがファイル ' 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
システム全体の設定をいじって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
また、上記の呼び出しには管理者権限は必要ないため、VisualStudioのビルド前の手順などで呼び出すことができます。
Visual StudioからPowerShellスクリプトを呼び出す前に、ExecutionPolicyを次のRemoteSigned
ようにPowerShellウィンドウから設定します...
Set-ExecutionPolicy -Scope CurrentUser;
ExecutionPolicy: RemoteSigned;
次に、次の方法でPowerShellスクリプトを呼び出します。
(完全な「powershell.exe」ファイルパスを渡す必要はありません)
powershell.exe $(SolutionDir)Setup.ps1 -SolutionDir $(SolutionDir) -ProjectPath $(ProjectPath)
次に、スクリプトでは、いつでも次のようなパラメータを読み取ることができます...
param([string]$SolutionDir,
[string]$ProjectPath);
#Write-Host ($SolutionDir +" Call this script with following aruments");
#Write-Host ($ProjectPath +" Call this script with following aruments");
ビルド後のコマンドで以下のコマンドを使用して作成しました。
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)