Дополнительно
Установка переменных среды Windows PowerShell
Я обнаружил, что установка переменной среды PATH влияет только на старую командную строку. Похоже, что PowerShell имеет другие настройки среды. Как изменить переменные среды для PowerShell (v1)?
Примечание:
Я хочу сделать свои изменения постоянными, чтобы не устанавливать их каждый раз при запуске PowerShell. Есть ли у PowerShell файл профиля? Что-то вроде профиля Bash в Unix?
551
15
Если в какой-то момент во время сеанса PowerShell вам понадобится временно добавить в переменную окружения PATH, вы можете сделать это следующим образом:
Изменение фактических переменных окружения может быть сделано с помощью используя информацию
env: namespace / drive
. Например, этот код обновит переменную окружения path:Существуют способы сделать настройки окружения постоянными, но если вы используете их только из PowerShell, то, вероятно. гораздо лучше использовать свой профиль для инициирования настройки. При запуске PowerShell запускает все файлы .ps1. файлы, которые он найдет в каталоге
WindowsPowerShell
в папке папкеМои документы
. Обычно у вас есть profile.ps1. уже находится там. На моем компьютере путь выглядит следующим образомВы также можете изменять переменные окружения пользователя/системы постоянно (т.е. будут сохраняться при перезагрузке оболочки) с помощью следующего:
Изменить системную переменную окружения
Изменение переменной окружения пользователя
Использование из комментариев - добавить в системную переменную окружения
Решение на основе строк также возможно, если вы не хотите писать типы
Из командной строке PowerShell:
Затем вы должны увидеть текст:
Перезапустите сеанс, а переменная будет доступна.
setx
также можно использовать для задания произвольных переменных. Типа setx /?` в строке для документации.Прежде чем возиться с ваш путь в этот путь, убедитесь, что вы сохранить копию существующего пути, делая `$env:в путь >> а.выйти в командную строку PowerShell.
Как JeanT'ы ответ, я хотел абстракция вокруг, добавляя к пути. В отличие от JeanT'ы ответ я должна работать без взаимодействия с пользователем. Другого поведения я ищу:
В случае, если он's полезный, вот это:
Проверьте моя суть для соответствующего удаления-EnvPath функции.
Хотя нынешний принятый ответ работает в том смысле, что переменной PATH получает постоянно обновляться из контекста PowerShell, он не'т на самом деле обновить переменную среды, хранящуюся в реестре Windows.
Чтобы достичь этого, вы, очевидно, можете использовать PowerShell, а также:
Более подробная информация в блоге использовать PowerShell, чтобы изменить экологическую тропу
Если вы используете PowerShell для расширения сообщества, правильную команду, чтобы добавить путь в переменную окружения PATH:
Ответы на все вопросы, предполагая, что постоянные изменения имеют те же проблемы: они разбивают путь значением реестре.
SetEnvironmentVariable
превращаетreg_expand_sz для
значение%Системный_корневой_каталог%\System32 " в " типа reg_sz
значениеC:\Windows\system32
.Любые другие переменные в пути, а также потерял. Добавить новые с помощью
%myNewPath%
выиграл't работать больше.Здесь'ы сценария
набор-PathVariable.пс1
, который я использую для решения этой проблемы:Я объяснить более подробно проблему в блоге.
Это задает путь для текущей сессии, и предлагает пользователю добавить его навсегда:
Вы можете добавить эту функцию в ваш профиль по умолчанию, (
Майкрософт.PowerShell_profile.пс1
), как правило, расположены впапке %USERPROFILE%\Мои Документы\каталог WindowsPowerShell
.Опираясь на [@Майкл Kropat'С][1] ответ я добавил параметр, чтобы добавить новый путь к существующему пути'variable и проверить, чтобы избежать добавления несуществующий путь:
[1]: https://stackoverflow.com/a/34844707/1509300 на "Майкл Kropat"и
Как Джонатан лидеров упоминается здесь, важно выполнить команду/скрипт возвышенности, чтобы иметь возможность изменить переменные окружения для 'машина', но для запуска некоторых команд повышенные не'т иметь, чтобы быть сделано с сообществом расширения, так что я'd, как изменить и расширить JeanT'с ответить таким образом, что изменение машина переменные также могут быть выполнены, даже если сам скрипт это'т выполняться с повышенными правами:
Большинство ответов не'т решение ОАК. Это касается проблем с UAC.
Сначала установите сообщества расширения PowerShell:
Шоко установить pscx аппликации
через http://chocolatey.org/ (возможно, придется перезагрузить среде оболочки).Затем включите pscx аппликации
Затем использовать
вызвать повышенных
Откройте PowerShell и выполните:
Мое предложение таково:
Я испытал это, чтобы добавить
C:\oracle\x64\bin к переменной окружения
PATH` постоянно и это прекрасно работает.Первый способ-это просто делать:
Но это изменение не является постоянным.
$env:в путь
по умолчанию то, что было раньше, как только вы закрываете терминал PowerShell и снова откройте его. Это потому, что вы применили изменения на уровне сессии, а не на уровне исходного кода (на уровне реестра). Просмотреть глобальное значение `$env:в путь, не так:Или более конкретно:
Теперь, чтобы изменить это, во-первых мы сохраняем исходный путь, который должен быть изменен:
Сейчас мы определяем, какой новый путь должна выглядеть. В данном случае мы имеем добавления новой папки:
Примечание: убедитесь, что `$newpath не выглядит, как вы хотите, чтобы она выглядела. Если нет, то вы могли бы повредить вашу ОС.
Теперь применить новое значение:
Теперь все в последний раз проверить, что это выглядит, как вы ожидаете:
Теперь вы можете перезапустить ваш терминал PowerShell (или даже перезагрузить компьютер) и видим, что это не откат до старых значений.
Обратите внимание на заказ, эти пути могут меняться, так что это в алфавитном порядке, поэтому убедитесь, что вы проверить все линии. Чтобы было легче, можно разделить вывод в строках с использованием запятой в качестве разделителя:
Я пытался оптимизировать СБФ'С и Михаил'С код немного, чтобы сделать его более компактным.
Я опираюсь о PowerShell'с приведением типа, где он автоматически преобразует строки В значения перечислений, поэтому я не'т определить словарь подстановок.
Я также вытащил блок, который добавляет новый путь в список в зависимости от условия, так что работа делается один раз и сохраняется в переменной для повторного использования.
Он применяется постоянно или только на время сеанса, в зависимости от параметра
$PathContainer
.Мы можем поставить блок кода в функцию или файл PS1, который мы называем непосредственно из командной строки. Я пошел с DevEnvAddPath.пс1.
Я что-то похожее на DevEnvRemovePath.пс1.
До сих пор они, кажется, работают.
В PowerShell, то можно перейти к переменной каталог среда, введя:
Это приведет вас к ОКР: каталог>. В этот каталог:
Чтобы посмотреть все переменные окружения, типа:
Чтобы увидеть конкретную переменную окружения, типа:
Чтобы задать переменную среды, типа:
Чтобы удалить переменную окружения, типа:
Более подробная информация в переменные среды.