执行 PowerShell 的构建后事件

12 浏览
0 Comments

执行 PowerShell 的构建后事件

能否在.NET项目中设置一个后置构建事件来执行PowerShell脚本?我正在使用该脚本来生成一些文件。同时,我能否将构建类型(调试或发布)传递给脚本?如果能提供一个示例就太好了。

0
0 Comments

问题的出现原因是需要在调用PowerShell时指定ExecutionPolicy,以确保脚本能够正常执行。这样做可以避免对系统范围的设置进行更改,并且不需要区分32位和64位环境。通过在调用PowerShell时指定ExecutionPolicy来解决这个问题是一种更简单和可靠的方法。

解决方法如下:

1. 在调用PowerShell时使用-ExecutionPolicy参数来指定ExecutionPolicy的值。例如:PowerShell -ExecutionPolicy Unrestricted

2. 可以通过调用Get-ExecutionPolicy来查看当前的ExecutionPolicy模式。

3. 可以将ExecutionPolicy的模式与脚本文件名结合在一起进行调用。例如:PowerShell -ExecutionPolicy Unrestricted -file test.ps1

4. 注意以上调用不需要管理员权限,因此可以在Visual Studio的Pre-Build Step或类似的环境中进行调用。

通过上述方法,可以确保在执行PowerShell脚本时指定正确的ExecutionPolicy,从而避免出现问题。

0
0 Comments

在使用Visual Studio中的post build事件执行PowerShell脚本时,可能会出现权限不足的问题。这是因为默认情况下,PowerShell的执行策略是限制的,不允许运行未签名的脚本。为了解决这个问题,可以在post build事件中添加一行命令来临时设置当前会话的执行策略。然后再运行你的ps1脚本。

具体的解决方法如下所示:

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

以上代码中,第一行命令`Set-ExecutionPolicy -Scope Process -ExecutionPolicy Unrestricted`会临时将当前会话的执行策略设置为不受限制,以允许运行未签名的脚本。第二行命令`powershell -ExecutionPolicy Unrestricted $(ProjectDir)Deploy.ps1 -ProjectDir $(ProjectDir) -TargetPath $(TargetPath)`则是运行你的ps1脚本,并传递一些参数给它。

通过以上的解决方法,你就可以在post build事件中顺利执行PowerShell脚本了。

0
0 Comments

问题:Post build event中执行PowerShell脚本出现的原因以及解决方法

在进行Post build event时,有时候需要执行PowerShell脚本。但是在执行之前,需要确保PowerShell已经配置好以执行脚本。可以通过以下命令设置PowerShell的执行策略:

Set-ExecutionPolicy RemoteSigned

需要注意的是,如果你的系统是64位的,那么需要特别注意Visual Studio 2010的可执行文件“devenv.exe”是32位的,因此需要允许32位的PowerShell执行脚本。

在配置好PowerShell的执行策略后,可以在项目属性中配置Post build event,如下所示:

![Post build in VS 2010](https://i.stack.imgur.com/gZoPi.png)

在上图中,可以看到一个示例的Post build配置,其中使用了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

另外,需要注意的是,不应该将执行策略设置为Unrestricted(不受限制),而应该设置为RemoteSigned(远程签名)。Unrestricted允许任何脚本执行,而RemoteSigned要求下载的脚本必须使用受信任的密钥进行签名。

对于64位系统,需要特别注意允许32位的PowerShell执行脚本。这是因为“devenv.exe”是32位的可执行文件。

以下是一些评论和补充:

- 使用“c:\windows\sysnative\windowspowershell\v1.0\powershell.exe”路径来调用64位版本的PowerShell。

- 可以通过运行“$pshome”命令来获取PowerShell的安装路径。

希望这篇文章对你有所帮助!

0