Я опытный в bash и у меня проблемы с пониманием среды в PowerShell. Есть ли способ, эквивалентный /usr/bin для добавления исполняемых файлов в среду? Как среда представлена в PowerShell - каков ее тип?

1 ответ1

2

В /usr/bin нет ничего особенного в файловых системах * nix, за исключением того, что это местоположение, которое по умолчанию находится в переменной окружения PATH для всех пользователей. Windows имеет ту же переменную среды, но единственными расположениями в ней по умолчанию для всех пользователей являются такие вещи, как C:\Windows\System32 .

Вы можете использовать System32 в качестве папки bin, но вы также можете просто создать новую папку для bin. C:\bin будет работать, хотя по умолчанию он будет доступен для записи всем пользователям, поэтому вы можете захотеть настроить разрешения, а затем добавить его в переменную среды PATH на уровне компьютера, чтобы все пользователи могли легко запускать из нее все. В качестве альтернативы рассмотрим папку bin каталоге каждого пользователя с указанием пути в переменной окружения PATH для каждого пользователя (когда переменная среды определена как в хранилищах пользователя, так и в хранилище компьютеров, она объединяется в фактическом использовании, сначала в машине).

PowerShell помещает все переменные среды в виртуальный "диск" с именем Env: (аналогично C: для файлов или HKLM: для куста реестра HKLM). Подробнее об этом читайте здесь: http://ss64.com/ps/syntax-env.html Вы можете получить доступ к переменным среды через $env:<VARNAME> как и к любой другой переменной (тип String) ; например, вы можете добавить к PATH (примечание: имена переменных среды Windows не чувствительны к регистру) следующим образом:

$env:path = $env:path + ";C:\foo\bar\baz"

Это только для текущего процесса (и его дочерних элементов). Если вы хотите сохранить значение в реестре, чтобы они были видны другим процессам или даже другим пользователям (примечание: редактирование переменных среды, влияющих на других пользователей, требует привилегий администратора), самый простой способ, который я знаю, - это использовать классы .NET (PowerShell в основном ".NETscript"). Например, чтобы добавить эту папку в переменную среды PATH на уровне компьютера, вы должны сделать следующее (от имени администратора):

[System.Environment]::SetEnvironmentVariable("path", $env:path + "C:\foo\bar\baz", "Machine")

Последний параметр - это строковое представление значения в системе.Перечисление EnvironmentVariableTaget, используемое Системой.Среда.SetEnvironmentVariable статический метод.

Вы, конечно, можете создать скрипт / командлет, который бы упростил вызов этой функции. Вы также можете использовать [System.Environment]::GetEnvironmentVariable(name, [optional store]) статическая функция для чтения переменных среды непосредственно из хранилищ пользователя или компьютера. Опять же, все переменные окружения являются строками (и когда вы получаете коллекцию из них, это словарь).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .