从PowerShell设置Visual Studio环境变量

时间:2016-04-04 10:34:00

标签: powershell batch-file visual-studio-2012 cmd

我安装了Visual Studio 9.0,但我想从PowerShell手动使用它。它带有两个设置脚本:32位编译器为vcvars32.bat,64位编译器为vcvars64.bat。当我打开cmd.exe并运行其中一个脚本时,它设置的一切都很好,我可以毫无问题地运行cl.exe。但是,当我从PowerShell运行其中一个安装脚本时,它并不起作用。脚本运行良好,但之后尝试运行cl.exe会产生"无法找到cl.exe"错误!在运行其中一个设置脚本后查看PATH环境变量的内容,我可以看到PATH实际上没有被修改过。

因此,似乎从PowerShell运行的批处理文件保持自己的环境变量状态,一旦批处理文件终止就会消失。那么有没有办法从PowerShell运行批处理文件并让这些批处理文件影响当前PowerShell会话的实际环境变量?因为这就是我的需要。由vcvars32.bitvcvars64.bit完成的所有工作都是设置环境变量,但它似乎只能从cmd.exe开始,而不是来自PowerShell。

3 个答案:

答案 0 :(得分:4)

您应该使用InvokeEnvironment脚本来执行此操作。检查其手册页:

Invoke-Environment <path_to_>vsvars32.bat

您可以通过确定操作系统位并制定vsvars<OsBits>.bat来实现这一点。

示例:

PS C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools> $env:INCLUDE -eq $null
PS C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools> $true
PS C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools> Invoke-Environment .\vsvars32.bat
PS C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools> $env:INCLUDE
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE;C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\INCLUDE;C:\Program Files (x86)\Windows Kits\10\include\10.0.10586.0\ucrt;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um;C:\Program Files (x86)\Windows Kits\10\include\10.0.10586.0\shared;C:\Program Files (x86)\Windows Kits\10\include\10.0.10586.0\um;C:\Program Files (x86)\Windows Kits\10\include\10.0.10586.0\winrt;

答案 1 :(得分:0)

我手头没有Visual Studio,但批处理脚本很可能只是为当前会话设置变量。从PowerShell运行它们对您没有任何好处,因为它们将在子CMD进程中启动并更改该进程的进程环境,而不是父进程(PowerShell)进程。

我怀疑您需要将变量定义转换为PowerShell,例如

set PATH=%PATH%;C:\some\where
set FOO=bar

变为

$env:Path += ';C:\some\where'
$env:FOO = 'bar'

将已翻译的定义写入.ps1文件并在PowerShell会话中点源该文件:

. C:\path\to\vcvars.ps1

答案 2 :(得分:0)

现在有一个Powershell模块posh-vs,它将在您的$profile中安装适当的东西。

PS> Install-module posh-vs
PS> Install-PoshVs