Как я могу использовать PowerShell с Командной строкой Visual Studio?

Я использовал Бету 2 некоторое время теперь, и она управляла мной гаек, что я должен плыть на плоскодонке к cmd.exe при выполнении Командной строки VS2010. Я раньше имел хороший vsvars2008.ps1 сценарий для Visual Studio 2008. У кого-либо есть vsvars2010.ps1 или что-то подобное?

116
задан David Clarke 27 June 2017 в 21:48
поделиться

2 ответа

Кража либерально отсюда: http://allen-mack.blogspot.com/2008/03/replace-visual-studio-command-Prompt.html , я смог заставить это работать. Я добавил следующее в свой профиль .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 больше не существует. Вместо этого вы можете использовать файл vsvars32.bat, который находится в папке Common7 \ Tools.

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
214
ответ дан 24 November 2019 в 02:14
поделиться

Самый простой вариант - запускать командную строку VS 2010, а затем запустить PowerShell.exe. Если вы действительно хотите сделать это из вашего «домой» PowerShell, подход, который вы показываете, - это путь. Я использую сценарий, который Ли Холмс написал некоторое время:

<#
.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 2.0.

25
ответ дан 24 November 2019 в 02:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: