Post build event execute PowerShell

后端 未结 5 1029
南旧
南旧 2020-11-27 12:04

Is it possible to set up a .NET project with a post build event to execute a powershell script? I am using this script to generate some files.

Also can I pass whethe

相关标签:
5条回答
  • 2020-11-27 12:41

    Before calling power-shell script from visual studio, set the ExecutionPolicy to RemoteSigned from power-shell window like this...

    Set-ExecutionPolicy -Scope CurrentUser;
    ExecutionPolicy: RemoteSigned;
    

    then call powershell script in the following manner...

    (no need to pass full "powershell.exe" file path)

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

    then in the script, you can always read the parameter like this...

    param([string]$SolutionDir,
         [string]$ProjectPath);
    #Write-Host ($SolutionDir +" Call this script with following aruments");
    #Write-Host ($ProjectPath +" Call this script with following aruments");
    
    0 讨论(0)
  • 2020-11-27 12:49

    command Set-ExecutePolicy will temporarily set execution policy under current session. If you set this in powershell and run post build command in vs you will still get not allowed. So set first then run your ps1 script like bellow

    powershell -ExecutionPolicy Unrestricted $(ProjectDir)Deploy.ps1 -ProjectDir $(ProjectDir) -TargetPath $(TargetPath)
    
    0 讨论(0)
  • 2020-11-27 12:54

    Here is an example :

    First of all : you must be aware of the fact that PowerShell must be configure to execute scripts. The following line allow PowerShell to execute scripts :

    Set-ExecutionPolicy RemoteSigned
    

    Special mention here : if you are running a 64bits system you've got to take care of the fact that 'devenv.exe' the Visual Studio 2010 executable is a 32Bits exe, so you need to allow PowerShell 32 to execute scripts.

    Once here you can go in your project properties and configure post build as shown here under (sorry in french) :

    Post build in VS 2010

    For example :

    Example of postbuild with powershell

    Here is the file 'psbuild.ps1', it creates a 'test.txt' in the target path with the configuration name inside. I put in comment different ways to debug your postbuild script (message box, sound, message on the output)

    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
    
    0 讨论(0)
  • 2020-11-27 12:57

    Instead of messing with system-wide settings and having to differentiate between 32 and 64-bit environments, a much easier and more reliable approach is to specify the ExecutionPolicy in the call to PowerShell, as follows:

    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
    

    Note in the above code how calling Get-ExecutionPolicy tells you the current mode. Also note how this mode is specified in the call to PowerShell itself, which can be combined with a script filename:

    test.ps1 contents:

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

    Calling test.ps1 with Unrestricted policy on a system having scripts disabled:

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

    Also note that the above call does not require admin rights, so it can be called in Visual Studio's Pre-Build Step or similar.

    0 讨论(0)
  • 2020-11-27 12:59

    I made it with below command in post-build even command:

    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 contents:

    param ([string]$target, [string]$generatedFileName)
    
    0 讨论(0)
提交回复
热议问题