[玩转系统] PowerShell 环境变量:终极指南
作者:精品下载站 日期:2024-12-14 12:54:49 浏览:12 分类:玩电脑
PowerShell 环境变量:终极指南
一旦您掌握了窍门,使用 PowerShell 设置 Windows 环境变量、读取环境变量以及创建新的环境变量就变得非常简单。您在本文中学到的技巧适用于 Windows 10 环境变量以及 Windows 7 SP1/Windows Server 2008 之后的任何 Windows 客户端/服务器。
PowerShell 提供了许多不同的方式与 $env:
PSDrive 中的 Windows 环境变量进行交互。注册表和[System.Environment]
.NET 类。您将在此分步演练中了解每种方法,包括了解环境变量范围。
假设
在本文中,我将在 Windows 10 上使用 Windows PowerShell 5.1。但是,如果您在 Windows 7 SP1 或更高版本上拥有高于 v3 的任何版本的 Windows PowerShell,那么我将向您展示的技术应该可以正常工作。
什么是环境变量?
顾名思义,环境变量存储有关 Windows 和应用程序使用的环境的信息。环境变量可以通过图形应用程序(例如 Windows 资源管理器)和纯文本编辑器(例如记事本)以及 cmd.exe 和 PowerShell 来访问。
使用环境变量可以帮助您避免在 PowerShell 脚本或模块中对文件路径、用户名或计算机名等进行硬编码。
常用环境变量
当您开始详细了解如何在 PowerShell 中使用环境变量时,您将遇到许多不同的变量。有些比其他更有用。下面列出了一些常见的环境变量及其用法,供参考。
ClientName通过远程桌面会话连接的远程计算机的名称。
SessionName这有助于确定操作系统是否将当前 Windows 会话视为在控制台上运行。对于控制台会话,SessionName 将为“Console”。与 Hyper-V 虚拟机的增强会话连接不会将 SessionName 报告为“Console”,而标准会话则会报告。
ComputerName计算机的名称。
SystemRoot and Windir当前 Windows 安装的路径。
ProgramFiles and ProgramFiles(x86)x64 和 x86 程序的默认位置。
ProgramW6432程序的默认位置,避免 32/64 位重定向。该变量仅适用于在 64 位平台上运行的 32 位进程。这意味着您可以使用它来识别 32 位 PowerShell 实例何时在 64 位系统上运行。
UserDNSDomain当前用户登录的 Active Directory 域的完全限定域名。仅在域登录时出现。
UserDomain当前用户登录的域的 NETBIOS 样式名称。如果没有域,可以是计算机名称。
UserDomainRoamingProfile用户漫游配置文件的中央副本的位置(如果有)。仅在域登录时出现。
UserName当前登录用户的名称。
UserProfile当前用户的配置文件在本地计算机上的位置。
环境变量范围
环境变量有三个范围。将范围视为变量层,这些变量层层叠加以给出总体情况。这些“层”相结合,为 Windows 中任何正在运行的进程提供许多不同的环境变量。
环境变量作用域“层次结构”
这些“层”中的每一层要么相互组合,要么相互覆盖。它们在如下层次结构中定义:机器 -> 用户 -> 进程,每个作用域变量都会覆盖父变量(如果父变量中存在)范围。
例如,常见的环境变量是TEMP
。该变量存储 Windows 本地临时文件夹的文件夹路径。该环境变量设置为:
C:\WINDOWS\TEMP
在机器范围内- user 范围内的
C:\Users\AppData\Local\Temp
C:\Users\AppData\Local\Temp
在进程范围内。
如果用户范围内没有设置TEMP
环境变量,那么最终结果将是C:\WINDOWS\TEMP
。
环境变量作用域类型
Windows 中存在三种不同的环境变量作用域。
机器
机器范围内的环境变量与正在运行的 Windows 实例相关联。任何用户帐户都可以读取这些内容,但设置、更改或删除它们需要使用提升的权限来完成。
用户
user 范围内的环境变量与运行当前进程的用户相关联。用户变量会覆盖具有相同名称的机器范围变量。
注意:Microsoft 建议计算机和用户范围的环境变量值包含不超过 2048 个字符。
过程
进程范围内的环境变量是机器和用户范围的组合,以及Windows动态创建的一些变量。
以下是正在运行的进程可用的环境变量列表。所有这些变量都是动态创建的。
ALLUSERSPROFILE
APPDATA
COMPUTERNAME
HOMEDRIVE
HOMEPATH
LOCALAPPDATA
LOGONSERVER
PROMPT
PUBLIC
SESSION
SystemDrive
SystemRoot
USERDNSDOMAIN
USERDOMAIN
USERDOMAIN_ROAMINGPROFILE
USERNAME
USERPROFILE
注册表中的环境变量
环境变量存储在两个注册表位置,一个用于用户范围,一个用于计算机范围。
不要使用注册表来管理环境变量
更改注册表内的变量时有一个问题。任何正在运行的进程都不会看到注册表中的变量更改。进程只能看到进程启动时存在的注册表变量和值,除非 Windows 通知它们发生了更改。
您可以使用 .NET 类,而不是直接修改注册表。 .NET [System.Environment]
类可以修改计算机和用户范围的环境变量并为您处理注册表事务。
直接修改注册表中的环境变量虽然可能,但没有意义。 .NET 类提供了一种更简单、Microsoft 支持的方法。您将在本文后面了解如何使用 [System.Environment]
.NET 类。
环境变量注册表位置和查询
我希望您已经确信不要直接修改注册表,但如果您想查看其中的内容,可以在 HKEY_CURRENT_USER\Environment
键中找到所有用户环境变量。机器范围的环境变量存储在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
中。
这些键的内部包含类型为 REG_SZ
或 REG_EXPAND_SZ
的注册表值。 REG_EXPAND_SZ
值将环境变量嵌入为其值的一部分。当检索值时,这些环境变量会扩展。
要演示这一点,请使用 REG 实用程序。这是 Windows 附带的一个小型命令行实用程序。
查询 TEMP 环境变量,如下所示。使用 QUERY
参数运行 REG
以检索 TEMP
变量的值。
> REG QUERY HKCU\Environment /V TEMP
HKEY_CURRENT_USER\Environment
TEMP REG_EXPAND_SZ %USERPROFILE%\AppData\Local\Temp
您有时会注意到显示的环境变量被百分比符号 (%COMPUTERNAME%
) 包围,如上所示。这是通过 cmd.exe 和批处理文件显示环境变量的老式方法。请注意,PowerShell 无法识别此格式。
REG 实用程序允许我们查看注册表值的本机值。值类型为 REG_EXPAND_SZ
,并且该值包含 %USERPROFILE%
环境变量。
如果您希望使用 PowerShell 检索注册表值,则可以使用 Get-Item
cmdlet,如下所示。
PS51> Get-ItemProperty -Path HKCU:\Environment -Name TEMP
TEMP : C:\Users\<your username>\AppData\Local\Temp
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Environment
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER
PSChildName : Environment
PSDrive : HKCU
PSProvider : Microsoft.PowerShell.Core\Registry
通过 GUI 查看和设置 Windows 环境变量
要查看用户和系统环境变量的 GUI 视图,请从 PowerShell、命令提示符或 Windows Key+R 运行 SystemPropertiesAdvanced.exe 以显示“系统属性高级”选项卡。单击下图中突出显示的EnvironmentVariables按钮。
如下所示的环境变量对话框允许您查看、创建和修改用户和计算机范围的环境变量。请注意,该对话框将机器范围变量称为“系统变量”。
现在您已经了解了环境变量,让我们开始讨论您的目的:使用 PowerShell 管理它们!
您可以通过多种不同的方式使用 PowerShell 与环境变量进行交互。
Env:
PSDrive 和 Provider - 基于会话。仅为当前 PowerShell 会话设置环境变量的值$env:
变量 - 基于会话。仅为当前 PowerShell 会话设置环境变量的值[System.Environment]
.NET 类 - 允许您在会话和重新启动之间保留用户和系统范围的环境变量
Env:
PSDrive 和 Provider
读取环境变量的最佳方法之一是称为 PowerShell 驱动器(PS 驱动器)的 PowerShell 概念。 PS 驱动器允许您通过 Env:
驱动器将环境变量视为文件系统。
切换到 Env:
驱动器
与所有 PS 驱动器一样,您可以通过 Env:\TEMP
、Env:\COMPUTERNAME
等路径引用它。但是为了节省一些击键,请切换到 Env :
驱动器就像任何文件系统驱动器一样,如下所示。
PS51> cd Env:
PS51 Env:\>
## or
PS51> Set-Location Env:
PS Env:\>
使用 Env:
驱动器进行制表符补全
您可以使用与访问文件系统相同的命令(例如 Get-Item
和 Get-ChildItem
)来访问环境变量。但您读取的是 Env:
驱动器,而不是文件系统。
由于环境变量存储在 PS 驱动器中,因此您可以使用 PowerShell 的 Tab 自动补全功能来循环访问可用变量,如下所示。
现在让我们通过几个示例来了解如何使用 Env:
PS 驱动器来处理环境变量。
使用 Env:
列出环境变量
PS51> Get-Item -Path Env:
PS51> Get-Item -Path Env:USERNAME
使用带有 Env:
的通配符列出环境变量
PS51> Get-Item -Path Env:user*
使用 Env:
查找环境变量值
这些命令的结果是键/值[System.Collections.DictionaryEntry]
.NET 对象。这些对象在 Name
属性中保存环境变量的名称,在 Value
属性中保存值。
您可以通过将 Get-Item
命令引用括在括号中并引用 Value
属性来访问环境变量的特定值,如下所示:
PS51> (Get-Item -Path Env:computername).Value
MYCOMPUTERHOSTNAME
如果您只需要返回某些环境变量,请使用标准 PowerShell cmdlet(例如 Select-Object
和 Where-Object
)来选择和筛选 返回的对象>Env:
提供商。
在下面的示例中,仅返回环境变量 COMPUTERNAME
。
PS51> Get-ChildItem -Path Env: | Where-Object -Property Name -eq 'COMPUTERNAME'
作为替代方法,请使用 Get-Content
cmdlet。此 cmdlet 返回一个包含环境变量值的 [String]
对象。该对象处理起来更简单,因为它仅返回值,而不是具有 Name
和 Value
属性的对象。
PS51> Get-Content -Path Env:\COMPUTERNAME
演示:在字符串中插入环境值
使用Get-Content
,您可以查找环境变量的值并将COMPUTERNAME
环境变量插入到文本字符串中。
PS51> 'Computer Name is: {0}' -f (Get-Content -Path Env:COMPUTERNAME)
Computer Name is: MYCOMPUTER
使用 Env:
设置(并创建)环境变量
使用 New-Item
cmdlet 通过 PowerShell 创建新的环境变量。以 Env:\
形式为 Name
值提供环境变量的名称,并为 Value
提供环境变量的值> 参数如下图所示。
PS51> New-Item -Path Env:\MYCOMPUTER -Value MY-WIN10-PC
Name Value
---- -----
MYCOMPUTER MY-WIN10-PC
使用 Set-item
cmdlet 设置环境变量,或者创建一个新环境变量(如果尚不存在)。您可以在下面看到使用 Set-Item
cmdlet,您可以创建或修改环境变量。
PS51> Set-Item -Path Env:testvariable -Value "Alpha"
使用 Env:
复制环境变量
有时会出现需要复制环境变量值的情况。您可以使用Copy-Item
cmdlet 来执行此操作。
在下面您可以看到 COMPUTERNAME
变量的值被复制到 MYCOMPUTER
,覆盖其现有值。
PS51> Get-Item -Path Env:\MYCOMPUTER
Name Value
---- -----
MYCOMPUTER MY-WIN10-PC
PS51> Copy-Item -Path Env:\COMPUTERNAME -Destination Env:\MYCOMPUTER
PS51> Get-Item -Path Env:\MYCOMPUTER
Name Value
---- -----
MYCOMPUTER WIN10-1903
使用 Env:
删除环境变量
可能会出现不再需要环境变量的情况。您可以使用以下三种方法之一删除环境变量:
- 使用
Set-Item
cmdlet 将环境变量设置为空值
PS51> Set-Item -Path Env:\MYCOMPUTER -Value ''
- 使用
Remove-Item
cmdlet。
PS51> Remove-Item -Path Env:\MYCOMPUTER
- 使用
Clear-Item
cmdlet。
PS51> Clear-Item -Path Env:\MYCOMPUTER
使用 Env:
重命名环境变量
在需要更改环境变量名称的情况下,您可以选择重命名,而不是使用 Env:
提供程序删除并重新创建。
使用 Rename-Item
cmdlet 更改环境变量的名称,同时保留其值。下面您可以看到 MYCOMPUTER
变量已重命名为 OLDCOMPUTER
,同时保留其值。
PS51> Rename-Item -Path Env:\MYCOMPUTER -NewName OLDCOMPUTER
PS51> Get-Item -Path OLDCOMPUTER
Name Value
---- -----
OLDCOMPUTER WIN10-1903
$Env:
变量
掌握了 Env:
驱动器将环境变量视为文件后,本节将向您展示如何将它们视为变量。管理会话中环境变量的另一种方法是使用 PowerShell 表达式解析器。此功能允许您使用 $Env:
范围来访问环境变量。
使用 $Env:
获取环境变量
使用 $Env
作用域,您可以直接引用环境变量,而无需使用 Get-Item
等命令,如下所示。
PS51> $env:computername
此方法可以轻松地将环境变量插入到字符串中,如下所示:
PS51> "The Computer Name is {0}" -f $env:computername
The Computer Name is WIN10-1809
PS51> "The Computer Name is $env:computername"
The Computer Name is WIN10-1809
使用 $Env:
设置或创建环境变量
使用此方法设置环境变量非常简单。如果还不存在,这也会创建一个新的环境变量,如下所示。
PS51> $env:testvariable = "Alpha"
使用 +=
语法添加到现有值,而不是覆盖它。
PS51> $env:testvariable = "Alpha"
PS51> $env:testvariable += ",Beta"
PS51> $env:testvariable
Alpha,Beta
使用 $Env:
删除环境变量
要使用此方法删除环境变量,只需将其值设置为空字符串即可。
PS51> $env:testvariable = ''
使用 [System.Environment]
.NET 类
.NET 类[System.Environment]
还提供获取和设置环境变量的方法。这是直接访问各种环境范围并设置跨 PowerShell 会话生存的环境变量的唯一方法。
在以下所有示例中,如果未提供范围,则假定为进程范围。
使用[System.Environment]
时,您将使用一些不同的.NET静态类方法。您不需要了解什么是静态方法。您只需要了解如何使用您将要学习的任何技术,您需要首先引用该类 ([System.Environment]
),后跟两个冒号 (: :
) 然后是方法。
使用 [System.Environment]
列出环境变量
如果您想查看特定范围内的所有环境变量,可以使用 GetEnvironmentVariables 方法。此方法返回指定为方法参数(在括号中)的范围内的所有环境变量。
PS51> [System.Environment]::GetEnvironmentVariables('User')
PS51> [System.Environment]::GetEnvironmentVariables('Machine')
PS51> [System.Environment]::GetEnvironmentVariables('Process')
# The same as Process
PS51> [System.Environment]::GetEnvironmentVariables()
使用[System.Environment]
获取单个环境变量
如果您需要查找特定的环境变量,可以通过两种不同的方式进行。
GetEnvironmentVariables().
- 不推荐
GetEnvironmentVariable('<var name>','<scope>')
获取环境变量()
使用 GetEnvironmentVariables()
方法,您可以使用点表示法来引用该值。将 [System.Environment]
类和静态方法引用括在括号中,后跟一个点,然后是环境变量的名称,如下所示:
PS51> ([System.Environment]::GetEnvironmentVariables()).APPDATA
请注意,以这种方式引用环境变量时,必须确保大小写匹配!在上面的示例中,尝试使用 appdata
引用 APPDATA
变量。请改用 GetEnvironmentVariable()
。
获取环境变量()
不要使用 GetEnvironmentVariables()
方法,而是使用 GetEnvironmentVariable()
来查找单个环境变量。它解决了大小写问题,还允许您指定范围。
要使用此方法,请指定环境变量名称以及您要查找该变量的范围,并以逗号分隔。
PS51> [System.Environment]::GetEnvironmentVariable('ComputerName','User')
# Blank
PS51> [System.Environment]::GetEnvironmentVariable('ComputerName','Machine')
# Blank
PS51> [System.Environment]::GetEnvironmentVariable('ComputerName','Process') WIN10-1903
# The same as Process
PS51> [System.Environment]::GetEnvironmentVariable('ComputerName')
WIN10-1903
使用 [System.Environment]
设置环境变量
使用 SetEnvironmentVariable()
方法为给定范围设置环境变量的值,或者创建一个新的环境变量(如果尚不存在)。
在进程范围中设置变量时,您会发现进程范围是不稳定的,而用户和机器范围的更改是永久性的。
PS51> [System.Environment]::SetEnvironmentVariable('TestVariable','Alpha','User')
PS51> [System.Environment]::SetEnvironmentVariable('TestVariable','Alpha','Process')
PS51> [System.Environment]::SetEnvironmentVariable('TestVariable','Alpha','Machine')
# The same as Process
PS51> [System.Environment]::SetEnvironmentVariable('TestVariable','Alpha')
注意:使用 32767 个字符或更多字符的变量名称或值调用 SetEnvironmentVariable 方法将导致抛出异常。
使用 [System.Environment]
删除环境变量
使用 SetEnvironmentVariable()
方法通过将环境变量的值设置为空字符串来删除给定范围的环境变量。
PS51> [System.Environment]::SetEnvironmentVariable('TestVariable', '', 'User')
PS51> [System.Environment]::SetEnvironmentVariable('TestVariable', '', 'Process')
PS51> [System.Environment]::SetEnvironmentVariable('TestVariable', '', 'Machine')
# The same as process
PS51> [System.Environment]::SetEnvironmentVariable('TestVariable', '')
有用的 PowerShell 环境变量
与许多其他 Windows 应用程序一样,PowerShell 有一些自己的环境变量。需要了解的两个有用的环境变量是 PSExecutionPolicyPreference 和 PSModulePath。
PSExecutionPolicyPreference
PSExecutionPolicyPreference
环境变量存储当前的 PowerShell 执行策略。如果通过以下方式设置特定于会话的 PowerShell 执行策略,则会创建它:
- 使用
Process
的Scope
参数运行Set-ExecutionPolicy
cmdlet - 运行
powershell.exe
可执行文件来启动新会话,并使用ExecutionPolicy
命令行参数设置会话策略。
PSModulePath
如果您未指定完整路径,则 PSModulePath
环境变量包含 PowerShell 搜索模块的路径。它的构成与标准 PATH
环境变量非常相似,各个目录路径以分号分隔。
PS51> $env:PSModulePath
C:\Program Files\WindowsPowerShell\Modules;C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules
快速提示:拆分每个文件夹以获取字符串数组,以便使用 $env:PSModulePath.split(';') 单独处理每个路径
概括
环境变量是获取有关正在运行的系统的信息或跨会话和重新启动存储信息的有用方法。无论您只是读取默认的 Windows 操作系统环境变量还是创建自己的环境变量,您现在都可以通过 PowerShell 使用多种方式来管理它们!
进一步阅读
- about_Environment_Variables
- Microsoft 文档中的 .NET [System.Environment] 类
- 了解 PowerShell 字符串格式和扩展字符串
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag