Как прописать путь к файлу powershell

Обновлено: 04.07.2024

Чтобы определить путь к текущему каталогу, введите команду Get-Location.

Командлет Get-Location аналогичен команде pwd в оболочке BASH. Командлет Set-Location аналогичен команде cd в Cmd.exe.

Настройка текущего расположения (Set-Location)

Команда Get-Location используется с командой Set-Location. Команда Set-Location позволяет вам указать расположение текущего каталога.

Обратите внимание, что после ввода команды вы не получите прямого отклика о действии команды. Большинство команд Windows PowerShell, выполняющих действия, практически не создают выходных данных, так как выходные данные не всегда полезны. Чтобы проверить успешность внесения изменения в каталог при вводе команды Set-Location, укажите параметр -PassThru при вводе команды Set-Location.

Параметр -PassThru можно использовать с некоторыми командами Set в Windows PowerShell для возврата сведений о результате, когда отсутствуют выходные данные по умолчанию.

Вы можете указать пути относительно текущего расположения так же, как и в большинстве командных оболочек UNIX и Windows. В стандартной нотации для относительных путей точка ( . ) представляет текущую папку, а две точки ( .. ) — родительский каталог текущего расположения.

Например, если вы находитесь в папке C:\Windows, точка ( . ) представляет C:\Windows, а две точки ( .. ) представляют C: . Текущее расположение можно изменить на корень диска C: путем ввода следующей команды:

Тот же метод работает для дисков Windows PowerShell, которые не являются дисками файловой системы, например HKLM: . В реестре в качестве расположения можно задать раздел HKLM\Software путем ввода следующего кода:

После этого можно изменить расположение каталога на родительский каталог, который является корнем диска Windows PowerShell HKLM: с помощью относительного пути:

Вы можете ввести Set-Location или использовать любой из встроенных псевдонимов Windows PowerShell для Set-Location (cd, chdir, sl). Пример:

Сохранение и отзыв последних расположений (Push-Location и Pop-Location)

Например, Windows PowerShell обычно запускается в корневом каталоге пользователя.

Чтобы передать текущее расположение в стек, а затем переместить его в папку локальных параметров, введите:

После этого можно передать расположение локальных параметров в стек и переместить его в папку Temp, введя следующее:

Чтобы убедиться, что каталоги изменены, введите команду Get-Location.

После этого можно перейти в последний открытый каталог, введя команду Pop-Location, и проверить изменение, введя команду Get-Location.

Как и в случае с командлетом Set-Location, можно включить параметр -PassThru при вводе командлета Pop-Location, чтобы открыть указанный каталог.

Кроме того, можно использовать командлеты расположения с сетевыми путями. Если у вас есть сервер FS01 с общей папкой Public, можно изменить расположение, введя

или диспетчер конфигурации служб

Чтобы изменить расположение на любой доступный диск, можно использовать команды Push-Location и Set-Location. Например, если у вас есть локальный дисковод компакт-дисков с буквой диска D, содержащий компакт-диск с данными, вы можете изменить расположение на него, введя команду Set-Location D: .

Работа с файлами и папками. Получение списка файлов и папок, содержащихся в папке.

Извлечь все элементы непосредственно из папки можно с помощью командлета Get-ChildItem . Для отображения скрытых и системных элементов добавьте необязательный параметр Force. Например, эта команда отображает непосредственное содержимое диска C Windows PowerShell (которое совпадает с содержимым физического диска C Windows):

Эта команда выводит только элементы, содержащиеся на диске непосредственно, так же как и команда DIR оболочки Cmd.exe или команда ls оболочки UNIX. Для показа вложенных элементов необходимо также указать параметр -Recurse . (Время выполнения этой операции будет очень велико.) Для вывода всего содержимого диска C введите:

Командлет Get-ChildItem позволяет отфильтровать элементы с помощью параметров Path, Filter, Include и Exclude, но обычно осуществляется лишь фильтрация по имени. Сложную фильтрацию на основе других свойств элементов можно выполнить с помощью Where-Object .

Следующая команда находит все исполняемые файлы в папке Program Files, которые были в последний раз изменены после 1 октября 2005 г. и размер которых не менее одного мегабайта и не более десяти мегабайт:

Копирование файлов и папок

Копирование выполняется с помощью командлета Copy-Item . Следующая команда создает резервную копию C:\boot.ini в C:\boot.bak:

Если целевой файл уже существует, то попытка копирования завершается неудачей. Чтобы перезаписать имеющийся целевой файл, используйте параметр Force.

Эта команда работает, даже если целевой объект доступен только для чтения.

Так же выполняется и копирование папок. Эта команда копирует папку C:\temp\test1 в новую папку C:\temp\DeleteMe рекурсивно.

Можно также скопировать избранные элементы. Следующая команда копирует все файлы TXT, содержащиеся в папке C:\data , в папку C:\temp\text :

Для копирования элементов файловой системы можно использовать и другие средства. В Windows PowerShell по-прежнему работают команды XCOPY, ROBOCOPY и такие COM-объекты, как Scripting.FileSystemObject. Например, можно воспользоваться COM-классом Scripting.FileSystem сервера сценариев Windows для создания резервной копии файла C:\boot.ini в файле C:\boot.bak :

Создание файлов и папок

Создание новых элементов осуществляется одинаковым образом всеми поставщиками Windows PowerShell. Если поставщик Windows PowerShell поддерживает более одного типа элементов (например, поставщик Windows PowerShell FileSystem различает каталоги и файлы), необходимо указать тип элемента.

Эта команда создает папку C:\temp\New Folder :

Эта команда создает пустой файл C:\temp\New Folder\file.txt .

При использовании параметра Force с командой New-Item для создания папки, которая уже существует, она не перезапишет и не заменит папку. Будет просто возвращен имеющийся объект папки. Однако, если использовать New-Item -Force в уже имеющимся файле, файл будет полностью перезаписан.

Удаление всех файлов и папок, содержащихся в папке

Удалить вложенные элементы можно с помощью командлета Remove-Item , однако он потребует подтверждения удаления, если элемент сам что-нибудь содержит. Например, при попытке удаления папки C:\temp\DeleteMe , которая содержит другие элементы, Windows PowerShell предварительно предложит подтвердить удаление этой папки:

Если подтверждение для каждого вложенного элемента нежелательно, задайте параметр Recurse:

Подключение локальной папки как диска

Отобразить локальную папку можно с помощью команды New-PSDrive . Следующая команда создает локальный диск P: , корневым каталогом которого является локальный каталог Program Files, отображающийся только в сеансе PowerShell:

Как и при использовании сетевых дисков, диски, отображенные в Windows PowerShell, немедленно становятся доступными оболочке Windows PowerShell. Чтобы создать подключенный диск, отображающийся в проводнике, нужен параметр -Persist . Но с этим параметром можно использовать только удаленные пути.

Чтение текстового файла в массив

Одним из наиболее общих форматов хранения текстовых данных является файл, отдельные строки которого рассматриваются как отдельные элементы. Командлет Get-Content используется для чтения всего файла за один шаг, как показано далее:

Командлет Get-Content сразу рассматривает данные, считанные из файла, как массив с одним элементом на строку содержимого файла. Убедиться в этом можно, проверив свойство Length полученного содержимого:

Эта команда наиболее полезна для непосредственного ввода в Windows PowerShell информационных списков. Например, можно хранить в файле C:\temp\domainMembers.txt список имен компьютеров или IP-адресов по одному имени на каждую строку файла. Вы можете использовать командлет Get-Content , чтобы извлечь содержимое файла и поместить его в переменную $Computers :

Теперь переменная $Computers представляет собой массив, содержащий в каждом элементе имя компьютера.

Работа с файлами, папками и разделами реестра

Перечисление файлов, папок и разделов реестра (Get-ChildItem)

Так как получение коллекции элементов из определенного расположения является обычной задачей, командлет Get-ChildItem разработан специально для возврата всех элементов, найденных в контейнере, например в папке.

Если необходимо вернуть все файлы и папки, которые находятся непосредственно в папке C:\Windows, введите:

Списки выглядят аналогично тем спискам, которые появляются при вводе команды dir в Cmd.exe или команды ls в командной оболочке UNIX.

С помощью параметров командлета Get-ChildItem можно создавать очень сложные списки. Далее рассмотрим несколько сценариев. Синтаксис командлета Get-ChildItem можно увидеть, введя:

Эти параметры можно скомбинировать и сопоставить для получения настраиваемых выходных данных.

Перечисление всех элементов в контейнере (-Recurse)

Чтобы увидеть оба элемента в папке Windows и все элементы во вложенных папках, используйте параметр Recurse для Get-ChildItem. В списке отображается все, что находится в папке Windows, а также элементы в ее вложенных папках. Пример:

Фильтрация элементов по имени (-Name)

Чтобы отобразить только имена элементов, используйте параметр Name для Get-Childitem:

Принудительное перечисление скрытых элементов (-Force)

В выходных данных команды Get-ChildItem не отображаются элементы, которые обычно невидимы в проводнике или Cmd.exe. Чтобы показать скрытые элементы, используйте параметр Force для Get-ChildItem. Пример:

Этот параметр называется Force, так как позволяет принудительно переопределить обычное поведение команды Get-ChildItem. Параметр Force широко используется для принудительного выполнения действия командлетом. Тем не менее, он не будет выполнять действия, компрометирующие систему безопасности.

Сопоставление имен элементов с подстановочными знаками

Команда Get-ChildItem допускает подстановочные знаки в пути к перечисляемым элементам.

Так как сопоставление с подстановочными знаками обрабатывается подсистемой Windows PowerShell, все командлеты, которые принимают подстановочные знаки, используют одну нотацию и имеют одно поведение сопоставления. В нотацию подстановочных знаков Windows PowerShell входит:

  • Звездочка (*) — соответствует нулю или большему количеству вхождений любого символа.
  • знак вопроса (?) — соответствует ровно одному символу;
  • Открывающая квадратная скобка ([) и закрывающая квадратная скобка (]) — заключают в себя набор символов для сопоставления.

Далее приводится несколько примеров работы спецификации из подстановочных знаков.

Чтобы найти в каталоге Windows все файлы, имеющие суффикс .log и ровно пять символов в основном имени, введите следующую команду:

Чтобы найти в каталоге Windows все файлы с именами, начинающимися на букву x, введите:

Чтобы найти все файлы с именами, начинающимися на x или z, введите:

Исключение элементов (-Exclude)

Вы можете исключить определенные элементы с помощью параметра Exclude для Get-ChildItem. Это позволит вам выполнить сложную фильтрацию в одном операторе.

Смешение параметров Get-ChildItem

В одной команде можно использовать несколько параметров Get-ChildItem. Перед тем как комбинировать параметры, убедитесь, что понимаете принципы сопоставления подстановочных знаков. Например, следующая команда не возвращает результатов:

Результаты отсутствуют, даже если существуют две библиотеки, которые начинаются на букву z в папке Windows.

Результаты не возвращены, так как подстановочный знак указан как часть пути. Хотя команда и была рекурсивной, командлет Get-ChildItem ограничил элементы до тех, которые находятся в папке Windows с именами, заканчивающимися на .dll.

Чтобы указать рекурсивный поиск для файлов, имена которых соответствуют специальному шаблону, используйте параметр -Include.

Работа с записями реестра. Создание списков записей реестра.

Существует несколько способов просмотра реестра. Самый простой — получить имена свойств, связанные с разделом. Например, чтобы просмотреть имена записей в разделе реестра HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion , используйте Get-Item . Разделы реестра содержат свойство с универсальным именем Property, которое является списком записей реестра в разделе. Следующая команда выбирает свойство Property и расширяет элементы так, чтобы они отображались в списке:

Чтобы просмотреть записи реестра в более удобочитаемой форме, используйте Get-ItemProperty .

Все свойства Windows PowerShell раздела имеют префиксы PS, например PSPath, PSParentPath, PSChildName и PSProvider.

Для создания ссылки на текущее расположение можно использовать нотацию *.* . Set-Location можно использовать для изменения значения на контейнер реестра CurrentVersion.

Кроме того, можно использовать встроенный диск HKLM PSDrive с Set-Location .

Затем можно использовать нотацию *.* для текущего расположения, чтобы перечислить свойства без указания полного пути.

Расширение пути работает так же, как и в файловой системе, поэтому в этом расположении можно получить перечисление ItemProperty для HKLM:\SOFTWARE\Microsoft\Windows\Help с помощью Get-ItemProperty -Path ..\Help .

Получение одной записи реестра

Если необходимо получить конкретную запись в разделе реестра, можно использовать один из нескольких возможных подходов. Этот пример получает значение DevicePath в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion .

Вместе с Get-ItemProperty используйте параметр Path, чтобы указать имя раздела и параметр Name, а также имя записи DevicePath.

Эта команда возвращает стандартные свойства Windows PowerShell, а также свойство DevicePath.

Хотя Get-ItemProperty содержит параметры Filter, Include и Exclude, их нельзя использовать для фильтрации по имени свойства. Эти параметры относятся к разделам реестра (путям элементов), а не записям реестра. Записи реестра — это свойства элементов.

Другой вариант — использовать средство командной строки Reg.exe. Для получения справки по reg.exe введите reg.exe /? в командной строке. Чтобы найти запись DevicePath, используйте reg.exe, как показано в следующей команде:

Настройка одной записи реестра

Если необходимо изменить определенную запись в разделе реестра, можно использовать один из нескольких подходов. Этот пример изменяет запись Path в разделе HKEY_CURRENT_USER\Environment . Запись Path указывает расположение для поиска исполняемых файлов.

  1. Получите текущее значение записи Path с помощью Get-ItemProperty .
  2. Добавьте новое значение, отделив его с помощью ; .
  3. Используйте Set-ItemProperty с указанным разделом, именем записи и значением, чтобы изменить запись реестра.

Хотя Set-ItemProperty содержит параметры Filter, Include и Exclude, их нельзя использовать для фильтрации по имени свойства. Эти параметры относятся в разделам реестра (путям элементов), а не к записям реестра (свойствам элементов).

Другой вариант — использовать средство командной строки Reg.exe. Для получения справки по reg.exe введите reg.exe /? . в командной строке.

В следующем примере запись Path изменяется за счет удаления пути, добавленного в предыдущем примере. Get-ItemProperty по-прежнему используется для получения текущего значения, исключая анализ строки, возвращаемой reg query . Методы SubString и LastIndexOf используются для получения последнего добавленного пути в запись Path.

Создание новых записей реестра

Чтобы добавить новую запись реестра с именем PowerShellPath в раздел CurrentVersion, используйте New-ItemProperty с путем к разделу, именем записи и значением записи. В этом примере используется значение переменной Windows PowerShell $PSHome , в которой хранится путь к каталогу установки Windows PowerShell.

Вы можете добавить новую запись в раздел с помощью следующей команды, и команда также вернет сведения о новой записи:

Значение PropertyType должно быть именем элемента перечисления Microsoft.Win32.RegistryValueKind из следующей таблицы:

ТАБЛИЦА 1
Значение PropertyType Значение
Двоичные данные Двоичные данные
DWord Число, которое является допустимым UInt32
ExpandString Строка, которая может содержать динамически раскрывающиеся переменные среды
MultiString Многострочная строка
String Любое строковое значение
QWord 8 байтов двоичных данных

Запись реестра можно добавить в несколько расположений, указав массив значений для параметра Path:

Кроме того, можно перезаписать существующее значение записи реестра, добавив параметр Force в любую команду New-ItemProperty .

Переименование записей реестра

Чтобы переименовать запись PowerShellPath в PSHome, используйте Rename-ItemProperty .

Чтобы отобразить переименованное значение, добавьте параметр PassThru в команду.

Удаление записей реестра

Чтобы удалить записи реестра PSHome и PowerShellPath, используйте Remove-ItemProperty .

При навигации по системам папок в проводнике у вас обычно есть определенное рабочее расположение, т. е. текущая открытая папка. Элементами в текущей папке можно легко управлять, щелкая их. Когда в интерфейсе командной строки (например, Cmd.exe) открыта папка, в которой находится определенный файл, вы можете получить к нему доступ, указав короткое имя, а не вводить весь путь к файлу. Текущий каталог называется рабочим.

Windows PowerShell использует существительное Location для ссылки на рабочий каталог и реализует семейство командлетов для просмотра расположения и управления им.

Получение текущего расположения (Get-Location)

Чтобы определить путь к текущему каталогу, введите команду Get-Location :

Командлет Get-Location аналогичен команде pwd в оболочке BASH. Командлет Set-Location аналогичен команде cd в Cmd.exe.

Настройка текущего расположения (Set-Location)

Команда Get-Location используется с командой Set-Location . Команда Set-Location позволяет вам указать расположение текущего каталога.

Обратите внимание, что после ввода команды вы не получите прямого отклика о действии команды. Большинство команд Windows PowerShell, выполняющих действия, практически не создают выходных данных, так как выходные данные не всегда полезны. Чтобы проверить успешность внесения изменения в каталог при вводе команды Set-Location , включите параметр -PassThru при вводе команды Set-Location :

Параметр PassThru можно использовать с некоторыми командами Set в Windows PowerShell для возврата сведений о результате, когда отсутствуют выходные данные по умолчанию.

Вы можете указать пути относительно текущего расположения так же, как и в большинстве командных оболочек UNIX и Windows. В стандартной нотации для определения относительных путей точка ( . ) представляет текущую папку, а две точки ( .. ) — родительский каталог текущего расположения.

Например, если вы находитесь в папке C:\Windows , точка ( . ) представляет C:\Windows , а две точки ( .. ) представляют C: . Текущее расположение можно изменить на корень диска C: путем ввода следующей команды:

Тот же метод работает в дисках Windows PowerShell, которые не являются дисками файловой системы, например HKLM:. В реестре в качестве расположения можно задать раздел HKLM\\Software , введя следующий код:

После этого можно изменить расположение каталога на родительский каталог, который является корнем диска Windows PowerShell HKLM: с помощью относительного пути:

Вы можете ввести Set-Location или использовать любой из встроенных псевдонимов Windows PowerShell для Set-Location (cd, chdir, sl). Пример:

Сохранение и отзыв последних расположений (Push-Location и Pop-Location)

При изменении расположения полезно отслеживать свое предыдущее расположение и иметь возможность вернуться к нему. Командлет Push-Location в Windows PowerShell создает упорядоченный журнал ("стек") путей к каталогам, которые вы открывали, чтобы можно было вернуться на шаг назад по журналу путей к каталогу, используя дополнительный командлет Pop-Location .

Например, Windows PowerShell обычно запускается в корневом каталоге пользователя.

Чтобы передать текущее расположение в стек, а затем переместить его в папку локальных параметров, введите:

После этого можно передать расположение локальных параметров в стек и переместить его в папку Temp, введя следующее:

Чтобы убедиться, что каталоги изменены, введите команду Get-Location :

После этого можно перейти в последний открытый каталог, введя команду Pop-Location , и проверить изменение, введя команду Get-Location :

Как и в случае с командлетом Set-Location , вы можете включить параметр PassThru при вводе командлета Pop-Location , чтобы открыть указанный каталог:

Кроме того, можно использовать командлеты расположения с сетевыми путями. Если у вас есть сервер FS01 с общей папкой Public, можно изменить расположение, введя

Для изменения расположения на любой доступный диск можно использовать команды Push-Location и Set-Location . Например, если у вас есть локальный дисковод компакт-дисков с буквой диска D, содержащий компакт-диск с данными, вы можете изменить расположение на дисковод компакт-дисков, введя команду Set-Location D: .

В интерфейсе командной строки проводник неудобно использовать для просмотра свободных физических дисков. Также в проводнике будут показаны не все диски PowerShell. Windows PowerShell предоставляет набор команд для управления дисками Windows PowerShell, о которых речь пойдет далее.

Описывает полные и относительные форматы имен путей в PowerShell.

Подробное описание

Все элементы в хранилище данных, доступные через поставщик PowerShell, могут быть однозначно идентифицированы по именам путей. Имя пути — это сочетание имени элемента, контейнера и вложенных элементов, в которых находится элемент, и диска PowerShell, через который осуществляется доступ к контейнерам.

В PowerShell имена путей делятся на один из двух типов: полный и относительный. Полное имя пути состоит из всех элементов, составляющих путь. Следующий синтаксис показывает элементы в полном имени пути:

<provider>Заполнитель относится к поставщику PowerShell, с помощью которого вы обращаетесь к хранилищу данных. Например, Поставщик FileSystem позволяет получить доступ к файлам и каталогам на компьютере. Этот элемент синтаксиса является необязательным и никогда не нужен, так как имена дисков уникальны для всех поставщиков.

<drive>Заполнитель относится к диску PowerShell, который поддерживается определенным поставщиком PowerShell. в случае с поставщиком FileSystem диски PowerShell сопоставляются с Windowsными дисками, настроенными в системе. Например, если в системе есть диск A: и диск C:, то Поставщик FileSystem создает те же диски в PowerShell.

После указания диска необходимо указать все контейнеры и подконтейнеры, содержащие этот элемент. Контейнеры должны быть указаны в иерархическом порядке, в котором они существуют в хранилище данных. Иными словами, необходимо начать с родительского контейнера, потом дочернего контейнера в этом родительском контейнере и т. д. Кроме того, каждому контейнеру должен предшествовать символ обратной косой черты. (Обратите внимание, что PowerShell позволяет использовать косую черту для совместимости с другими оболочками PowerShell.)

После указания контейнера и подконтейнеров необходимо указать имя элемента, перед которым следует обратная косая черта. например, полное имя пути для файла Shell.dll в каталоге C: \ Windows System32 выглядит следующим образом \ :

в этом случае к диску, через который осуществляется доступ к контейнерам, относится диск C:, контейнер верхнего уровня — Windows, вложенная папка — System32 (находится в контейнере Windows), а элемент — Shell.dll.

В некоторых ситуациях указывать полное имя пути не требуется, а вместо этого можно использовать относительный путь. Относительное имя пути основано на текущем рабочем расположении. PowerShell позволяет выявление элемента на основе его расположения относительно текущего рабочего расположения. Можно указать относительные имена путей, используя специальные символы. В следующей таблице описывается каждый из этих символов и приводятся примеры относительных путей и полных имен путей. Примеры в таблице основаны на текущем рабочем каталоге, для которого задано значение C:\ Windows.

Символ Описание Относительный путь Полный путь.
. Текущее расположение .\ Системой c: \ Windows \ система
.. Родительский элемент текущего расположения ..\ Программные файлы c: \ Program Files
\ Корень диска текущего \Программные файлы c: \ Program Files
location
None Специальные символы отсутствуют Система c: \ Windows \ система

При использовании имени пути в команде это имя вводится точно так же, как полное имя пути или его относительная часть. Например, предположим, что текущий рабочий каталог — C:\ Windows. Следующая Get-ChildItem команда извлекает все элементы в каталоге К:\течдокс:

Обратная косая черта указывает, что следует использовать корневой диск текущего рабочего расположения. так как рабочий каталог имеет значение c: \ Windows, корневым диском является диск c:. Так как каталог течдокс находится за пределами корневого каталога, необходимо указать только обратную косую черту.

Те же результаты можно получить с помощью следующей команды:

Независимо от того, используется ли полное имя пути или имя относительного пути, имя пути важно не только потому, что он находит элемент, а также потому, что он однозначно определяет элемент, даже если этот элемент имеет то же имя, что и другой элемент в другом контейнере.

Я обнаружил, что установка переменной среды PATH влияет только на старую командную строку. PowerShell, похоже,имеет разные параметры среды. Как изменить переменные среды для PowerShell (v1)?

Я хочу сделать свои изменения постоянными, поэтому мне не нужно устанавливать их каждый раз, когда я запускаю PowerShell. У PowerShell есть файл профиля? Что-то вроде профиля Bash в Unix?

изменение фактических переменных среды может быть сделано путем с помощью env: namespace / drive информация. Например, это код обновит переменную среды path:

есть способы сделать настройки среды постоянными, но если вы используете их только из PowerShell, это, вероятно намного лучше использовать свой профиль для начала настройки. При запуске PowerShell будет запускать любой .ps1 файлы, которые он находит в каталоге WindowsPowerShell под мои документы папка. Как правило, у вас естьпрофиль.ps1 файл уже там. Путь на моем компьютере

Если во время сеанса PowerShell вам необходимо временно измените переменную среды PATH, вы можете сделать это так:

вы также можете постоянно изменять переменные среды пользователя/системы (т. е. будут постоянными при перезапуске оболочки) со следующим

из командной строки PowerShell:

вы должны увидеть текст:

перезапустите сеанс, и переменная будет доступна. setx также можно использовать для задания произвольных переменных. Тип setx /? в приглашении для документации.

прежде чем возиться с вашим путем таким образом, убедитесь, что вы сохранили копию существующего пути, выполнив $env:path >> a.out в командной строке PowerShell.

хотя текущий принятый ответ работает в том смысле, что переменная path постоянно обновляется из контекста PowerShell, она фактически не обновляет переменную среды, хранящуюся в реестре windows. Для этого вы можете использовать PowerShell:

Если вы используете Расширения сообщества PowerShell, правильная команда для добавления пути к пути переменной среды:

как JeanT это!--5-->, Я хотел абстракцию вокруг добавления к пути. В отличие от ответа JeanT я нуждался в нем, чтобы работать без взаимодействия с пользователем. Другое поведение, которое я искал:

  • обновления $env:Path чтобы изменения вступили в силу в текущем сеансе
  • сохраняется изменение переменной среды для будущих сеансов
  • не добавляет дубликат пути, когда тот же путь уже существует

В случае, если это полезно, вот это:

это задает путь для текущего сеанса и предлагает пользователю добавить его навсегда:

вы можете добавить эту функцию в ваш профиль по умолчанию, ( Microsoft.PowerShell_profile.ps1 ), обычно расположенном в %USERPROFILE%\Documents\WindowsPowerShell .

все ответы, предполагающие постоянное изменение, имеют одну и ту же проблему: они нарушают значение реестра path.

SetEnvironmentVariable превращается в REG_EXPAND_SZ стоимостью %SystemRoot%\system32 на REG_SZ стоимостью C:\Windows\system32 .

любые другие переменные в пути, а также потерял. Добавление новых с помощью %myNewPath% не работает.

вот скрипт Set-PathVariable.ps1 что я использую для решения этой проблемы:

я объясняю проблему более подробно в блог пост.

As Лидеры Джонатан указано здесь, важно запустить команду / скрипт, повышенную, чтобы иметь возможность изменять переменные среды для 'машина', но запуск некоторых команд с повышенными правами не должен выполняться с расширениями сообщества, поэтому я хотел бы изменить и расширить JeanT это ответ таким образом, что изменение переменных машины также может быть выполнено, даже если сам скрипт не запускается повышенный:

затем включите pscx

затем использовать Invoke-Elevated

дом на @Майкл Kropat это ответа я добавил параметр, чтобы добавить новый путь к существующему PATH переменная и проверка, чтобы избежать добавления несуществующего пути:

МОЕ ПРЕДЛОЖЕНИЕ ЭТО ОДНО я протестировал это, чтобы добавить C:\oracle\x64\bin к пути постоянно, и это работает нормально.

первый способ просто сделать:

но это изменение не является постоянным, $env: path по умолчанию вернется к тому, что было раньше, как только вы закроете терминал powershell и снова откроете его. Это потому, что вы применили изменение на уровне сеанса, а не на уровне источника (который является уровнем реестра). Для просмотра глобальное значение $env: path, do:

или, более конкретно:

теперь, чтобы изменить это, сначала мы фиксируем исходный путь, который необходимо изменить:

теперь мы определяем, как должен выглядеть новый путь, в этом случае мы добавляем новую папку:

Примечание: убедитесь, что $newpath выглядит так, как вы хотите, чтобы он выглядел, если нет, то вы можете повредить свою ОС.

теперь применить новые значение:

теперь сделайте последнюю проверку, что это выглядит так, как вы ожидаете:

теперь вы можете перезапустить терминал powershell (или даже перезагрузить компьютер) и увидеть, что он не откатывается к старому значению снова. Обратите внимание, что порядок путей может измениться так, что он находится в алфавитном порядке, поэтому убедитесь, что вы проверяете всю строку, чтобы упростить ее, вы можете разделить вывод на строки, используя двоеточие в качестве делиметра:

Читайте также: