Я использую бета-версию 2 на некоторое время, и это заставило меня гать, что я должен плыть к cmd.exe при запуске командной строки VS2010. У меня был хороший скрипт vsvars2008.ps1 для Visual Studio 2008. У кого-то есть vsvars2010.ps1 или что-то подобное?Как использовать PowerShell с командной строкой Visual Studio?
ответ
Крадущий свободно отсюда: 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
Самый простой вариант - запустить командную строку 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 Community Extensions 2,0 в ближайшее время.
Престижность к Энди 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
старый вопрос, но стоит другой ответ на (a) предоставление поддержки VS2013; (б) объединить лучшие из двух предыдущих ответов; и (c) предоставить функциональную оболочку.
Эта техника основана на технике Энди (которая опирается на технику Аллена Макса, как указывал Энди (который, в свою очередь, основывается на технике Роберта Андерсона, как указал Аллен (все из которых имели небольшой сбой, как указано на этой странице только известным пользователем как «я ...», поэтому я тоже это учитывал))).
Вот мой последний код - обратите внимание на использование нежирного квантора в регулярном выражении для обработки любых возможных значений вложенных значений. Это также упрощает код: одно совпадение вместо совпадения, затем разбивается, как в примере Энди, либо на совпадение, а затем индексирует и подстроки, как в примере «я».
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
}
Я нашел простой способ 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, перейдите к Цвета вкладка свойств ярлыка и установите значения красного, зеленого и синего в значения 1, 36 и 86 соответственно.
Простой и работает как шарм. Этот ответ заслуживает большего внимания. –
Единственное, что мне не нравится в этом, заключается в том, что он сохраняет загруженный процесс cmd.exe. Кроме этого это приятное решение – orad
Кит уже упоминалось PowerShell Community Extensions (PSCX), с Invoke-BatchFile
команды:
Invoke-BatchFile "${env:ProgramFiles(x86)}\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"
Я также заметил, что PSCX также имеет Import-VisualStudioVars
функцию:
Import-VisualStudioVars -VisualStudioVersion 2013
Начиная с PSCX 3.2.0, VS 2015 не поддерживается в этом командлете. Я открыл для него [issue] (https://pscx.codeplex.com/workitem/43203). – orad
Я хотел бы передать команды в детской оболочки, так как:
cmd /c "`"${env:VS140COMNTOOLS}vsvars32.bat`" && <someCommand>"
или в качестве альтернативы
cmd /c "`"${env:VS140COMNTOOLS}..\..\VC\vcvarsall.bat`" amd64 && <someCommand> && <someOtherCommand>"
- 1. Используйте PowerShell для командной строки Visual Studio
- 2. Powershell внутри Visual Studio
- 3. Как получить список пакетов конкретного решения Visual Studio с командной строкой nuget.exe
- 4. Visual Studio - Сделать строкой отладки строкой
- 5. dotCover filter с командной строкой
- 6. Совместим ли Powershell со стандартной командной строкой?
- 7. Как скомпилировать программу WPF с командной строкой?
- 8. Как отлаживать модуль powershell в Visual Studio
- 9. Visual Studio заменить заявление с пустой строкой
- 10. Форма Powershell в Visual Studio
- 11. PowerShell в Visual Studio 2012
- 12. Проект Visual Studio 2012 PowerShell
- 13. Использование командной строки из Visual Studio
- 14. Управления Visual Studio с помощью PowerShell
- 15. Как использовать Visual Studio Autoformat из сценария?
- 16. Печать переменных Visual Studio PowerShell
- 17. PHP с командной строкой
- 18. Что происходит с этой командной строкой PowerShell, цитирующей/экранирующей?
- 19. Управления очередей печати с помощью PowerShell или командной строкой
- 20. Как использовать цитаты с командной строкой powershell, get-wmiobject и запрос или фильтр
- 21. Создает с командной строкой «devenv», но не с Visual Studio (sln) и MSBUild
- 22. Использование Android Studio 2.2 Поддержка CMake с командной строкой SDK
- 23. Как отменить сборку Visual Studio с помощью командной строки?
- 24. Как открыть вкладку с предоставленной строкой в коде Visual Studio
- 25. Как использовать PHP с Visual Studio
- 26. Как использовать Aurelia.io с кодом Visual Studio
- 27. Как использовать IronPython с Visual Studio 2008
- 28. Как использовать ASP.NET с Visual Studio 2008
- 29. Как использовать app.config с надстройкой Visual Studio?
- 30. Как лучше использовать GCC с Visual Studio
Я сделал то же самое, и это работало нормально. –
Я согласен - это тоже отлично сработало для меня. Мне также пришлось изменить путь к визуальной студии в Program Files (не x86), так как я не на 64-битной системе. – czuroski
Просто обратите внимание, что этот же метод работает для Visual Studio 2012. Просто измените «Microsoft Visual Studio 10.0» на «Microsoft Visual Studio 11.0» –