私はしばらくの間Beta 2を使用してきましたが、VS2010コマンドプロンプトを実行するときにcmd.exeをパントする必要があることに気がつきました。以前、Visual Studio 2008用のニースvsvars2008.ps1スクリプトを使用していました。vsvars2010.ps1または類似のものはありますか?
ここから自由に盗む: http://allen-mack.blogspot.com/2008/03/replace-visual-studio-command-Prompt.html 、これを機能させることができました。 profile.ps1に以下を追加しましたが、すべて順調です。
pushd 'c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC'
cmd /c "vcvarsall.bat&set" |
foreach {
if ($_ -match "=") {
$v = $_.split("="); set-item -force -path "ENV:\$($v[0])" -value "$($v[1])"
}
}
popd
write-Host "`nVisual Studio 2010 Command Prompt variables set." -ForegroundColor Yellow
これは長年-Visual Studio 2015まで有効でした。vcvarsall.batはもう存在しません。代わりに、Common7\Toolsフォルダーにあるvsvars32.batファイルを使用できます。
pushd 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools'
cmd /c "vsvars32.bat&set" |
foreach {
if ($_ -match "=") {
$v = $_.split("="); set-item -force -path "ENV:\$($v[0])" -value "$($v[1])"
}
}
popd
write-Host "`nVisual Studio 2015 Command Prompt variables set." -ForegroundColor Yellow
Visual Studio 2017の状況は再び変わりました。vsvars32.bat
は、VsDevCmd.bat
。正確なパスは、使用しているVisual Studio 2017のエディションによって異なる場合があります。
pushd "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\Tools"
cmd /c "VsDevCmd.bat&set" |
foreach {
if ($_ -match "=") {
$v = $_.split("="); set-item -force -path "ENV:\$($v[0])" -value "$($v[1])"
}
}
popd
Write-Host "`nVisual Studio 2017 Command Prompt variables set." -ForegroundColor Yellow
最も簡単なオプションは、VS 2010コマンドプロンプトを実行し、PowerShell.exeを起動することです。 「ホーム」PowerShellプロンプトからこれを本当に行いたい場合は、表示するアプローチがその方法です。 Lee Holmesがしばらく前に書いたスクリプトを使用します。
<#
.SYNOPSIS
Invokes the specified batch file and retains any environment variable changes
it makes.
.DESCRIPTION
Invoke the specified batch file (and parameters), but also propagate any
environment variable changes back to the PowerShell environment that
called it.
.PARAMETER Path
Path to a .bat or .cmd file.
.PARAMETER Parameters
Parameters to pass to the batch file.
.EXAMPLE
C:\PS> Invoke-BatchFile "$env:VS90COMNTOOLS\..\..\vc\vcvarsall.bat"
Invokes the vcvarsall.bat file to set up a 32-bit dev environment. All
environment variable changes it makes will be propagated to the current
PowerShell session.
.EXAMPLE
C:\PS> Invoke-BatchFile "$env:VS90COMNTOOLS\..\..\vc\vcvarsall.bat" AMD64
Invokes the vcvarsall.bat file to set up a 64-bit dev environment. All
environment variable changes it makes will be propagated to the current
PowerShell session.
.NOTES
Author: Lee Holmes
#>
function Invoke-BatchFile
{
param([string]$Path, [string]$Parameters)
$tempFile = [IO.Path]::GetTempFileName()
## Store the output of cmd.exe. We also ask cmd.exe to output
## the environment table after the batch file completes
cmd.exe /c " `"$Path`" $Parameters && set > `"$tempFile`" "
## Go through the environment variables in the temp file.
## For each of them, set the variable in our local environment.
Get-Content $tempFile | Foreach-Object {
if ($_ -match "^(.*?)=(.*)$")
{
Set-Content "env:\$($matches[1])" $matches[2]
}
}
Remove-Item $tempFile
}
注:この関数は、まもなくリリースされる PowerShell Community Extensions 2.0モジュールベースのリリースで利用可能になります。
簡単な方法を見つけました here :ショートカットを変更します。
元のショートカットは次のようなものです。
%comspec% /k ""C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\VsDevCmd.bat""
次のように、最後の引用符の前に& powershell
を追加します。
%comspec% /k ""C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\VsDevCmd.bat" & powershell"
PSのように見せたい場合は、ショートカットプロパティのColorsタブに移動し、赤、緑、青の値を1に設定します。それぞれ36および86。
古い質問ですが、(a)VS2013サポートを提供する別の回答に値します。 (b)2つの以前の回答のベストを組み合わせます。 (c)関数ラッパーを提供します。
これは@Andyの手法(Andyが示したAllen Mackの手法を基に構築されています(これは、次にAllenが示したRobert Andersonの手法を基に構築されています) -"、だからそれも考慮に入れた)))。
これが私の最後のコードです。正規表現で貪欲でない数量詞を使用して、値に埋め込まれている可能性のある等しい値を処理することに注意してください。それはまた、コードを単純化するために起こります:マッチの代わりに単一のマッチがAndyの例のように分割されるか、マッチの後にindexofとsubstringsが「me--」の例のように分割されます)。
function Set-VsCmd
{
param(
[parameter(Mandatory, HelpMessage="Enter VS version as 2010, 2012, or 2013")]
[ValidateSet(2010,2012,2013)]
[int]$version
)
$VS_VERSION = @{ 2010 = "10.0"; 2012 = "11.0"; 2013 = "12.0" }
$targetDir = "c:\Program Files (x86)\Microsoft Visual Studio $($VS_VERSION[$version])\VC"
if (!(Test-Path (Join-Path $targetDir "vcvarsall.bat"))) {
"Error: Visual Studio $version not installed"
return
}
pushd $targetDir
cmd /c "vcvarsall.bat&set" |
foreach {
if ($_ -match "(.*?)=(.*)") {
Set-Item -force -path "ENV:\$($matches[1])" -value "$($matches[2])"
}
}
popd
write-Host "`nVisual Studio $version Command Prompt variables set." -ForegroundColor Yellow
}
キースは既にInvoke-BatchFile
コマンドでPowerShell Community Extensions(PSCX)について言及しています:
Invoke-BatchFile "${env:ProgramFiles(x86)}\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"
また、PSCXにはImport-VisualStudioVars
関数もあることに気付きました。
Import-VisualStudioVars -VisualStudioVersion 2013
アンディSの答えに感謝します。私は彼のソリューションをしばらく使用していましたが、今日問題に遭遇しました。等号が含まれる値は、等号で切り捨てられます。たとえば、私は持っていた:
Java_TOOL_OPTIONS=-Duser.home=C:\Users\Me
しかし、私のPSセッションは報告しました:
PS C:\> $env:Java_TOOL_OPTIONS
-Duser.home
プロファイルスクリプトを次のように変更して、これを修正しました。
pushd 'c:\Program Files (x86)\Microsoft Visual Studio 11.0\VC'
cmd /c "vcvarsall.bat&set" |
foreach {
if ($_ -match "=") {
$i = $_.indexof("=")
$k = $_.substring(0, $i)
$v = $_.substring($i + 1)
set-item -force -path "ENV:\$k" -value "$v"
}
}
popd
私は次のように子シェルにコマンドを渡すのが好きです:
cmd /c "`"${env:VS140COMNTOOLS}vsvars32.bat`" && <someCommand>"
または代わりに
cmd /c "`"${env:VS140COMNTOOLS}..\..\VC\vcvarsall.bat`" AMD64 && <someCommand> && <someOtherCommand>"