当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 如何在 PowerShell 中设置环境变量

作者:精品下载站 日期:2024-12-14 06:31:59 浏览:14 分类:玩电脑

如何在 PowerShell 中设置环境变量


操作系统和应用程序使用环境变量来存储配置设置、系统路径和其他信息。您计算机上的所有程序都可以访问此数据。我们可以使用PowerShell来查看、更改或设置环境变量。

要设置环境 (env) 变量,您通常使用“系统属性”屏幕,但当您需要在多台计算机上添加或更改变量时,使用 PowerShell 会更容易。

在本文中,我将解释不同的环境变量以及如何使用 PowerShell 设置环境变量。

环境变量

在我们了解如何使用 PowerShell 管理变量之前,我们首先仔细看看环境 (env) 变量,以便更好地理解它们。环境变量基本上是键值对,是进程运行环境的一部分。

Windows 上可以定义三个范围的环境变量:

  • 用户范围

  • 机器(系统)范围

  • 工艺范围

用户范围主要包含用户配置文件文件夹的路径,例如 OneDrive、Appdata 或临时文件夹。在机器范围内,您将找到有关设备的信息以及系统查找和执行命令或程序的关键变量,而无需每次都指定完整路径。

进程范围包含当前进程(或 PowerShell 会话)中的变量。它还将列出用户和机器范围内的所有变量。当会话关闭时,添加到流程范围的自定义变量将会丢失。

因此,要设置重新启动后仍然可用的环境变量,并且对于所有用户,您需要将它们存储在计算机范围内。为此,您需要拥有正确的权限。

使用 PowerShell 获取环境变量

在我们向系统添加新的环境变量之前,我们首先看一下如何在 PowerShell 中获取变量。我们可以使用两种方法在 Powershell 中获取和设置环境变量:.NET 方法 [System.Environment] 和 PowerShell 环境提供程序 $env:

要列出所有环境变量,您可以使用以下命令之一:

# .NET method
[System.Environment]::GetEnvironmentVariables()

# Environment provider, sorting them by name
Get-Item env:* | sort-object name

# Or in short:
gi env:* | sort name

# Using the drive method
dir env:

.NET 方法的优点是您可以指定变量的范围。这样我们就可以只列出用户环境变量作为例子。但是,当您知道需要哪个变量或想要查看所有变量时,环境提供程序当然要短得多。

因此,要仅查看用户环境变量,我们可以在.NET方法中指定用户范围。其他选项是机器进程

# Replace User with Machine or Process to view the other scopes
[System.Environment]::GetEnvironmentVariables([System.EnvironmentVariableTarget]::User)

[玩转系统] 如何在 PowerShell 中设置环境变量

查看具体环境变量

如果您想检查特定变量的值,那么您至少需要知道名称。然后我们可以使用 $env: 方法来查看变量的值:

# Get the OneDrive folder path
$env:OneDrive

例如,如果您不知道变量的确切名称,或者想要查看所有与 OneDrive 相关的变量,则可以将 Get-Item cmdlet 与通配符 * 结合使用

# Get all variables that start with OneDrive
Get-Item env:OneDrive*

# Result
Name                           Value
----                           -----
OneDrive                       C:\Users\ruud\OneDrive - Pixel Supply
OneDriveConsumer               C:\Users\ruud\OneDrive
OneDriveCommercial             C:\Users\ruud\OneDrive - Pixel Supply

# Or get all variables that contain the word Path
Get-Item env:*Path*

我们还可以通过.NET方法获取环境变量。为此,您需要使用命令[System.Environment]::GetEnvironmentVariable。请注意,此命令看起来与 .NET 方法几乎相同,只是其末尾缺少 s

要列出 OneDrive 变量值,我们可以使用以下命令。请注意,我们还可以指定变量的范围,但这不是必需的。

[System.Environment]::GetEnvironmentVariable("OneDrive", "User")

在 PowerShell 中设置 ENV 变量

要在 PowerShell 中设置环境 (env) 变量,您可以使用两种方法:环境提供程序或 [System.Environment]::SetEnvironmentVariable 方法。推荐使用后者,因为它也允许您在机器(系统)范围内设置和更改变量。

例如,要创建一个新的环境变量 TenantId,并使用我们的租户 ID 作为值,我们可以使用以下命令:

[System.Environment]::SetEnvironmentVariable('TenantId','11e1234-28gv-4413-aaf8-a1e8b7f4c3d6')

现在,如果我们查看该变量,我们可以看到它已设置为所需的值:

[玩转系统] 如何在 PowerShell 中设置环境变量

但有一个问题,如果关闭PowerShell,那么环境变量就消失了。原因是您添加的任何变量默认都存储在流程范围中。我们可以通过添加所需的范围来解决这个问题,例如机器范围:

笔记

要在机器范围内添加或更改变量,您需要具有提升的权限。在提升(管理员)模式下运行 PowerShell,否则您会收到错误“不允许请求的注册表访问”。
[System.Environment]::SetEnvironmentVariable('TenantId','11e1234-28gv-4413-aaf8-a1e8b7f4c3d6', 'Machine')

如果我们现在查看机器范围内的环境变量,那么您将看到它已列出:

[玩转系统] 如何在 PowerShell 中设置环境变量

添加持久环境变量的另一个选项是在 PowerShell 配置文件中添加变量。这样,每次打开 PowerShell 时都会添加/更新环境变量。

例如,要添加新变量并更新默认 Path 变量,您可以在 Powershell 配置文件中添加以下两行:

$Env:UserPrincipalName = '[email protected]'
$Env:Path += ';C:\Tools

添加临时 ENV 变量

当添加变量时没有指定作用域时,它会自动存储在进程作用域中。这意味着当您关闭 PowerShell 会话时该变量将丢失。因此,当您需要添加临时环境变量时,此方法非常有用。

为此,我们可以使用前面描述的 .NET 方法,也可以使用变量语法或环境提供程序。变量语法 $Env: 是快速设置或更新变量的最简单方法:

$env:UserPrincipalName = '[email protected]'

如果需要更新该值,只需设置新值即可更改它。这些值始终是字符串,这意味着我们可以使用 += 运算符将值附加到变量。例如,这允许您向现有 PATH 变量添加路径。

# Change the value of the variable
$env:UserPrincipalName = '[email protected]'

# Adding a value to the existing one:
$env:Path += ';d:\scripts'

创建或更新变量的另一种方法是使用环境提供程序。例如,要快速添加环境变量,您可以使用 New-Item cmdlet:

New-Item -Path Env:\UserPrincipalname -Value '[email protected]'

# Result
Name                           Value
----                           -----
UserPrincipalname              [email protected]

[玩转系统] 如何在 PowerShell 中设置环境变量

要更新或更改变量的值,您可以使用 Set-Item cmdlet:

# Change the variable
Set-Item -Path Env:\UserPrincipalname -Value '[email protected]'

删除环境变量

环境变量不能为空。因此,要删除它,我们可以将该值设置为空字符串(或 $null),也可以使用 Remove-Item cmdlet 来删除该变量。

要将 PowerShell 中的环境变量设置为空字符串,您可以使用前面描述的方法之一:

# Set the variable to $null
$env:UserPrincipalName = $null

# Change it to an empty string
$env:UserPrincipalName = ''

# Set it to an empty string with the .NET method
[Environment]::SetEnvironmentVariable('UserPrincipalName ', '', 'Machine')

# Or use the Environment provider
Set-Item -Path Env:\UserPrincipalname -Value ''

[玩转系统] 如何在 PowerShell 中设置环境变量

另一种选择是使用 Remove-Item cmdlet。它与上面的方法具有相同的效果,但可能更清楚您实际上是在删除变量。

Remove-Item -Path Env:\UserPrincipalname

包起来

设置环境变量 PowerShell 有不同的方法。最简单的方法当然是使用环境变量$env:。但如果您想创建持久变量,则需要使用 .Net 方法并将范围设置为机器。

请记住,在创建变量时,请仔细检查该变量是否尚不存在。覆盖系统变量可能会对其他程序产生负面影响。

希望这篇文章对您有所帮助,如果您有任何疑问,请在下面发表评论。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯