Как установить переменную среды можно получить доступ в любое время с помощью powershell? - PullRequest
1 голос
/ 28 марта 2019

У меня есть текстовый файл с этим форматом 12345.Я хочу установить это значение как переменную окружения, чтобы я мог получить к нему доступ даже при закрытом PowerShell.Мои ожидания, когда я хочу получить доступ к этой переменной среды из командной строки, я просто использую эту команду: echo %ID%, и я покажу 12345

$file = Get-Content .\file.txt
$Variable = "ID"
[Environment]::SetEnvironmentVariable("$Variable", "$file")

Обновить код

Я пыталсяэто, но я все еще не могу получить переменную окружения с помощью этой команды из командной строки: echo %ID%

$file = Get-Content .\file.txt
$Variable = "ID"

[Environment]::SetEnvironmentVariable("$Variable", "$file",1)
[Environment]::SetEnvironmentVariable("$Variable", "$file","User")

Ответы [ 2 ]

2 голосов
/ 28 марта 2019

вам нужно указать целевую среду. по умолчанию этот статический метод устанавливает только пару $ Var / value для текущего процесса. Вы, вероятно, захотите это для текущего пользователя, поэтому используйте 2-й метод, указанный в 1-й ссылке ниже, с целью, установленной на user. вот страницы документов ...

Environment.SetEnvironmentVariable Метод (Система) | Документы Microsoft
- https://docs.microsoft.com/en-us/dotnet/api/system.environment.setenvironmentvariable?view=netframework-4.7.2

EnvironmentVariableTarget Enum (Система) | Документы Microsoft
- https://docs.microsoft.com/en-us/dotnet/api/system.environmentvariabletarget?view=netframework-4.7.2

2 голосов
/ 28 марта 2019

Третий аргумент [Environment]::SetEnvironmentVariable позволяет вам выбрать переменную среды. По умолчанию используется текущий процесс, поэтому вызов с двумя аргументами делает переменную доступной только для текущего сеанса PowerShell.

Если у вас есть разрешения, вы можете включить Переменную среды на уровне машины (2), либо:

[Environment]::SetEnvironmentVariable("$Variable", "$file",2)
[Environment]::SetEnvironmentVariable("$Variable", "$file","Machine")

Или просто пользовательский уровень (1), либо:

[Environment]::SetEnvironmentVariable("$Variable", "$file",1)
[Environment]::SetEnvironmentVariable("$Variable", "$file","User")
  • «Уровень машины» в реестре HKEY_LOCAL_MACHINE.
  • Уровень пользователя: HKEY_CURRENT_USER

https://docs.microsoft.com/en-us/dotnet/api/system.environmentvariabletarget?view=netframework-4.7.2

...