2016-04-04 44 views
1

Visual Studio 9.0をインストールしましたが、PowerShellから手動で使用したいと思います。これには、32ビットコンパイラの場合はvcvars32.bat、64ビットコンパイラの場合はvcvars64.batという2つのセットアップスクリプトが付属しています。 cmd.exeを開いてスクリプトの1つを実行すると、すべてがうまくセットアップされ、問題なくcl.exeを実行できます。 PowerShellからこれらのセットアップスクリプトの1つを実行すると、動作しません。スクリプトは正常に実行されますが、その後cl.exeを実行しようとすると、「cl.exeが見つかりませんでした」というエラーが発生します。そして、セットアップスクリプトの1つを実行した後にPATH環境変数の内容を見ると、実際には全く変更されていないことがわかります。PATHPowerShellからVisual Studio環境変数を設定する

バッチファイルが終了するとすぐに消えるように、PowerShellのバッチファイルは独自の環境変数の状態を維持しているようです。 PowerShellからバッチファイルを実行し、それらのバッチファイルを現在のPowerShellセッションの実際の環境変数に影響させる方法はありますか?それは私が必要とするものなので。 vcvars32.bitvcvars64.bitで行われているのはすべて、後で環境変数を設定していますが、PowerShellではなく、cmd.exeからしか動作していないようです。

答えて

2

あなたはそれを行うためにInvokeEnvironmentスクリプトを使用する必要があります。

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

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

があなたのPowerShellセッションでファイルを.ps1というファイルとドッ​​ト・ソースに変換定義を書くなり、 。そのmanページをチェックしてください:

Invoke-Environment <path_to_>vsvars32.bat 

あなたはfurhter OSのビットを決定し、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; 
+0

ありがとう、しかし、それは動作していないようです。あなたの 'README.md'で説明したように私のプロフィールに追加しましたが、' Invoke-Environment'コマンドが見つかりません。完全修飾パスを使用してスクリプトを呼び出すと、スクリプトが見つかりますが、出力がなく、環境変数も正しく設定されていないため、引数として渡すバッチスクリプトを実行していないようです。 – Andreas

+0

あなたはそれをすべてやる必要はありません。アクティブなシェルに関数をコピー/ペーストするだけです。私はそれが機能するようにプロジェクトの数に関数を使用しました。変数が '$ Env:'に存在するかどうかチェックしたかどうかを調べるための出力はありません。 – majkinetor

+0

まだ動作しません。あなたの例で 'VS100COMNTOOLS'とは何ですか?これは環境変数ですか?ここには設定されていません。 'vsvarsXXX.bat'スクリプトは' C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ bin'にあります。 – Andreas

0

Visual Studioは手元にありませんが、バッチスクリプトは現在のセッションの変数を設定する可能性が最も高いです。それらをPowerShellから実行すると、子CMDプロセスで起動され、そのプロセスのプロセス環境は変更されますが、親(PowerShell)プロセスでは変更されないため、優れた方法はありません。

変数定義をPowerShellに変換する必要があると思われます。

. C:\path\to\vcvars.ps1 
+0

うーん、PowerShellのためにそれらのバッチスクリプトを書き換えることはもちろん、私は避けたいのですが何かです。 PowerShell環境変数を変更できるように、PowerShellコンテキスト内でバッチスクリプトを実行する方法はありませんか? – Andreas

+0

私はそうは思わない。 –

+0

可能です。私の答えを確認 – majkinetor

関連する問題