Я опытный в bash и у меня проблемы с пониманием среды в PowerShell. Есть ли способ, эквивалентный /usr/bin
для добавления исполняемых файлов в среду? Как среда представлена в PowerShell - каков ее тип?
1 ответ
В /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])
статическая функция для чтения переменных среды непосредственно из хранилищ пользователя или компьютера. Опять же, все переменные окружения являются строками (и когда вы получаете коллекцию из них, это словарь).