if ($null -eq $env:FOO) { $env:FOO = 'bar' }
# If you want to treat a *nonexistent* variable the same as
# an existent one whose value is the *empty string*, you can simplify to:
if (-not $env:FOO) { $env:FOO = 'bar' }
# Alternatively:
if (-not (Test-Path env:FOO)) { $env:FOO = 'bar' }
# Or even (quietly fails if the variable already exists):
New-Item -ErrorAction Ignore env:FOO -Value bar
#Set "Jo" value to variable "NameX", this value is accesible in current process and subprocesses, this value is accessible in new opened terminal.
Set-PersistentEnvironmentVariable -Name "NameX" -Value "Jo"; Write-Host $env:NameX
#Append value "ma" to current value of variable "NameX", this value is accesible in current process and subprocesses, this value is accessible in new opened terminal.
Set-PersistentEnvironmentVariable -Name "NameX" -Value "ma" -Append; Write-Host $env:NameX
#Set ".JomaProfile" value to variable "ProfileX", this value is accesible in current process/subprocess.
Set-LocalEnvironmentVariable "ProfileX" ".JomaProfile"; Write-Host $env:ProfileX
3条答案
按热度按时间e5nqia271#
下面的代码为当前进程定义环境变量
FOO
(如果它还不存在)。在 * PowerShell(Core)7.1 +* 中,它具有空合并运算符,您可以简化为:
注:
根据定义,环境变量是 * 字符串 *。如果给定的环境变量是 * 定义的 ,但 * 没有值 ,则其值为 * 空字符串 (
''
)而不是$null
。因此,与$null
进行比较可用于区分 * 未定义 * 环境变量和 * 已定义但没有值 * 的环境变量。但是,请注意,在PowerShell/. NET * 中 * 将 * 分配给 * 环境变量 * 会 * 不 * 区分$null
和''
,并且 * 任何一个 * 值都会导致 * 取消定义(删除) 目标环境变量;类似地,在cmd.exe
set FOO=
中,会导致删除/不定义变量FOO
,并且GUI对话框(可通过sysdm.cpl
访问)也不允许您使用空字符串定义变量。但是,Windows API(SetEnvironmentVariable
) 不 * 允许创建包含空字符串的环境变量。在类Unix平台上,空字符串值也是允许的,并且本地的、POSIX兼容的shell(例如
bash
和/bin/sh
)-不像PowerShell- 也 * 允许您创建它们(例如export FOO=
)。注意,Unix上的环境变量定义和查找是区分大小写的,这与Windows不同。注意:如果环境变量是通过上述赋值语句(
$env:FOO = ...
)按需创建的,则当前进程及其创建的任何 * 子进程 * 都将存在该环境变量仅谢谢,PetSerAl。以下内容主要由Ansgar Wiechers贡献,并由Mathias R. Jessen补充:
[System.Environment]
类的静态SetEnvironmentVariable()
方法:请注意,这些定义在 * 未来 * 会话(进程)中生效,因此为了为 * 当前 * 进程 * 以及*定义变量,请另外运行
$env:FOO = 'bar'
*,这实际上与[Environment]::SetEnvironmentVariable('FOO', 'bar', 'Process')
相同。当
[Environment]::SetEnvironmentVariable()
与User
或Machine
一起使用时,会向其他应用程序发送一条WM_SETTINGCHANGE
消息,通知它们发生了更改(尽管很少有应用程序会对此类通知做出React)。这不适用于以
Process
为目标时(或赋值给$env:FOO
时),因为其他应用程序(进程)无论如何都无法看到该变量。另请参见:Creating and Modifying Environment Variables(TechNet文章)。
[*]从. NET(Core)7开始,在类似Unix的平台上,针对 * persistent * 作用域(
User
或Machine
)的尝试会被 * 悄悄忽略 *,而且这种不支持定义持久环境变量的情况不太可能改变,因为缺乏跨Unix平台的统一机制。ifsvaxew2#
在Windows上,您可以使用:
在Linux上,我们可以将export VARIABLE_NAME = Variable value添加到文件**~/. bash_profile中。对于新的bash终端,进程执行位于~/. bash_profile中的这些指令。
在MacOS上类似于Linux,但是如果你有zsh终端**,文件是**. zprofile**,如果默认终端是bash,文件是**. bash_profile**。在我的函数代码中,如果你愿意,我们需要添加对默认终端的检测。我假设默认终端是zsh。
检查环境变量
Shell initialization files
ZSH: .zprofile, .zshrc, .zlogin - What goes where?
zysjyyx43#
如果PowerShell中的环境变量不存在,您可以使用以下代码设置该变量:
将VAR_NAME替换为环境变量的名称,将VAR_VALUE替换为所需的值。