[玩转系统] 关于环境变量
作者:精品下载站 日期:2024-12-14 02:23:14 浏览:12 分类:玩电脑
关于环境变量
简短描述
描述如何在 PowerShell 中访问和管理环境变量。
环境变量存储操作系统和其他程序使用的数据。 PowerShell 创建以下环境变量:
- POWERSHELL_TELEMETRY_OPTOUT
- POWERSHELL_DISTRIBUTION_CHANNEL
- POWERSHELL_UPDATECHECK
- PSExecutionPolicyPreference
- PSModulePath
- PSModuleAnalysisCachePath
- PSDisableModuleAnalysisCacheCleanup
有关这些变量的完整说明,请参阅本文的 PowerShell 环境变量。
详细描述
PowerShell 可以访问和管理任何受支持的操作系统平台中的环境变量。 PowerShell 环境提供程序允许您在当前控制台中获取、添加、更改、清除和删除环境变量。
笔记
与 Windows 不同,macOS 和 Linux 上的环境变量名称区分大小写。例如,$env:Path
和 $env:PATH
在非 Windows 平台上是不同的环境变量。
与 PowerShell 中其他类型的变量不同,环境变量始终存储为字符串。与其他变量不同的是,它们由子进程继承,例如本地后台作业和模块成员运行的会话。这使得环境变量非常适合存储父进程和子进程所需的值。
在 Windows 上,环境变量可以在三个范围内定义:
- 机器(或系统)范围
- 用户范围
- 工艺范围
Process 作用域包含当前进程或 PowerShell 会话中可用的环境变量。该变量列表继承自父进程,并由 Machine 和 User 作用域中的变量构造而成。
当您在 PowerShell 中更改环境变量时,更改仅影响当前会话。此行为类似于 Windows 命令外壳中的 set
命令和基于 UNIX 的环境中的 setenv
命令的行为。要更改 Machine 或 User 范围中的值,必须使用 System.Environment 类的方法。
要更改机器范围的变量,您还必须拥有权限。如果您尝试在没有足够权限的情况下更改值,该命令将失败并且 PowerShell 将显示错误。
PowerShell 提供了几种不同的方法来使用和管理环境变量。
- 变量语法
- 环境提供程序和项目 cmdlet
- .NET System.Environment 类
使用变量语法
您可以使用以下语法显示和更改环境变量的值:
$Env:<variable-name>
例如,要显示 WINDIR
环境变量的值:
$Env:windir
C:\Windows
在此语法中,美元符号 ($
) 表示变量,驱动器名称 (Env:
) 表示环境变量,后跟变量名称 (windir
)。
您可以使用以下语法创建和更新环境变量的值:
$Env:<variable-name> = "<new-value>"
例如,创建 Foo
环境变量:
$Env:Foo = 'An example'
由于环境变量始终是字符串,因此您可以像使用任何其他包含字符串的变量一样使用它们。例如:
"The 'Foo' environment variable is set to: $Env:Foo"
$Env:Foo += '!'
$Env:Foo
The 'Foo' environment variable is set to: An example
An example!
在 PowerShell 中,环境变量不能设置为空字符串。将环境变量设置为 $null
或空字符串会将其从当前会话中删除。例如:
$Env:Foo = ''
$Env:Foo | Get-Member -MemberType Properties
Get-Member : You must specify an object for the Get-Member cmdlet.
At line:1 char:12
+ $env:foo | Get-Member
+ ~~~~~~~~~~
+ CategoryInfo : CloseError: (:) [Get-Member], InvalidOperationException
+ FullyQualifiedErrorId : NoObjectInGetMember,Microsoft.PowerShell.Commands.GetMemberCommand
Get-Member
返回错误,因为环境变量已被删除。您可以看到,当您在空字符串上使用它时,它不会返回错误:
'' | Get-Member -MemberType Properties
TypeName: System.String
Name MemberType Definition
---- ---------- ----------
Length Property int Length {get;}
有关 PowerShell 中变量的更多信息,请参阅 about_Variables。
使用环境提供程序和项目 cmdlet
PowerShell 的环境提供程序为您提供了一个与环境变量交互的界面,其格式类似于文件系统驱动器。它允许您在 PowerShell 中获取、添加、更改、清除和删除环境变量和值。
例如,要创建值为 Bar
的 Foo
环境变量:
New-Item -Path Env:\Foo -Value 'Bar'
Name Value
---- -----
Foo Bar
您还可以使用 Copy-Item
复制环境变量,使用 Set-Item
设置环境变量的值,使用 Get-Item
列出环境变量code>,并使用 Remove-Item
删除环境变量。
Copy-Item -Path Env:\Foo -Destination Env:\Foo2 -PassThru
Set-Item -Path Env:\Foo2 -Value 'BAR'
Get-Item -Path Env:\Foo*
Remove-Item -Path Env:\Foo* -Verbose
Name Value
---- -----
Foo2 Bar
Name Value
---- -----
Foo2 BAR
Foo Bar
VERBOSE: Performing the operation "Remove Item" on target "Item: Foo2".
VERBOSE: Performing the operation "Remove Item" on target "Item: Foo".
使用 Get-ChildItem
cmdlet 查看环境变量的完整列表:
Get-ChildItem Env:
有关使用环境提供程序管理环境变量的更多信息,请参阅about_Environment_Provider。
使用系统环境方法
System.Environment 类提供 GetEnvironmentVariable()
和 SetEnvironmentVariable()
方法来获取和修改环境变量。
以下示例创建一个新的环境变量 Foo
,其值为 Bar
,然后返回其值。
[Environment]::SetEnvironmentVariable('Foo','Bar')
[Environment]::GetEnvironmentVariable('Foo')
Bar
您可以通过为变量值指定空字符串,使用 SetEnvironmentVariable()
方法删除环境变量。例如,要删除 Foo
环境变量:
[Environment]::SetEnvironmentVariable('Foo','')
[Environment]::GetEnvironmentVariable('Foo')
有关 System.Environment 类的方法的详细信息,请参阅环境方法。
在 Windows 中创建持久环境变量
在 Windows 上,可以通过三种方法对环境变量进行持久更改:
- 将它们设置在您的个人资料中
- 使用
SetEnvironmentVariable()
方法 - 使用系统控制面板
在您的配置文件中设置环境变量
您在 PowerShell 配置文件中添加或更改的任何环境变量都可以在加载您的配置文件的任何会话中使用。此方法适用于任何受支持平台上的任何版本的 PowerShell。
例如,要创建 CompanyUri
环境变量并更新 Path
环境变量以包含 C:\Tools
文件夹,请将以下行添加到您的 PowerShell 个人资料:
$Env:CompanyUri = 'https://internal.contoso.com'
$Env:Path += ';C:\Tools'
笔记
在 Linux 或 macOS 上,使用冒号 (:
) 代替分号 (;
) 将新路径与列表中位于该路径之前的路径分隔开。
您可以使用 $PROFILE
自动变量获取 PowerShell 配置文件的路径。有关配置文件的更多信息,请参阅 about_Profiles。
使用 SetEnvironmentVariable() 设置环境变量
在 Windows 上,您可以指定 SetEnvironmentVariable()
方法的范围作为第三个参数,以在该范围内设置环境变量。计算机和用户范围都保留在当前进程之外,允许您保存新的或更改的环境变量。
例如,要将值为 Bar
的新环境变量 Foo
保存到机器范围:
[Environment]::SetEnvironmentVariable('Foo', 'Bar', 'Machine')
您可以通过将变量的值设置为空字符串来从用户或计算机范围中删除环境变量。
[Environment]::SetEnvironmentVariable('Foo', '', 'Machine')
在系统控制面板中设置环境变量
在系统控制面板中,您可以添加或编辑用户和系统(机器)范围内的现有环境变量。 Windows 将这些值写入注册表,以便它们在会话和系统重新启动时保持不变。
要使用系统控制面板对 Windows 上的环境变量进行持久更改:
- 打开系统控制面板。
- 选择系统。
- 选择高级系统设置。
- 转到高级选项卡。
- 选择环境变量...。
- 做出你的改变。
在非 Windows 平台上创建持久环境变量
Linux 和 macOS 具有操作系统在启动应用程序之前用于设置环境变量的配置文件和脚本。
当将 PowerShell 作为默认(登录)shell 运行时,您可以在操作系统支持的全局初始化文件中定义环境变量。例如,在 Linux 上,您可以将环境变量添加到 /etc/environment
文件中,或者创建一个设置环境变量的脚本并将其放入 /etc/profile.d
文件夹。在 macOS 上,您可以将环境变量添加到 /etc/profile
文件中。
从另一个 shell 启动 PowerShell 时,您可以在非登录 shell 使用的特定于 shell 的初始化文件中定义环境变量,例如 ~/.bashrc
表示 bash
或 ~/.zshrc 为 zsh
。
有关更多信息,请参阅操作系统和默认 shell 的文档。
PowerShell 环境变量
PowerShell 功能可以使用环境变量来存储用户首选项。这些变量的工作方式类似于首选项变量,但它们由创建它们的会话的子会话继承。有关首选项变量的详细信息,请参阅 about_Preference_Variables。
存储首选项的环境变量包括:
POWERSHELL_TELEMETRY_OPTOUT
要选择退出遥测,请将环境变量设置为
true
、yes
或1
。有关更多信息,请参阅 about_Telemetry。为了使该环境变量生效,必须在启动 PowerShell 进程之前设置它。有关创建持久环境变量的信息,请参阅前面的部分。
POWERSHELL_DISTRIBUTION_CHANNEL
从 PowerShell 7.2 开始,此环境变量由安装程序包设置,用于记录 PowerShell 的安装方法和来源。
此信息包含在发送给 Microsoft 的遥测数据中。用户不应更改此值。
POWERSHELL_UPDATECHECK
可以使用
POWERSHELL_UPDATECHECK
环境变量更改更新通知行为。有关详细信息,请参阅 about_Update_Notifications。支持以下值:
Off
关闭更新通知功能
Default
与未定义POWERSHELL_UPDATECHECK
相同:- GA 发布 GA 版本更新通知
- 预览版/RC 版本 GA 和预览版更新通知
LTS
仅通知长期服务 (LTS) GA 版本的更新在启动 PowerShell 进程之前必须设置环境变量的非默认值。有关创建持久环境变量的信息,请参阅前面的部分。
PSExecutionPolicyPreference
存储当前会话设置的执行策略。仅当为单个会话设置执行策略时,该环境变量才存在。您可以通过两种不同的方式执行此操作。
使用 ExecutionPolicy 参数从命令行启动会话来设置会话的执行策略。
使用Set-ExecutionPolicy
cmdlet。使用值为 Process
的 Scope 参数。
手动设置环境变量。更改该变量的值会更改当前进程的执行策略。
此信息仅适用于 Windows 平台。有关更多信息,请参阅 about_Execution_Policies。
PSModulePath
$env:PSModulePath
环境变量包含搜索以查找模块和资源的文件夹位置列表。在 Windows 上,文件夹位置列表由分号 (;
) 字符分隔。在非 Windows 平台上,冒号 (:
) 分隔环境变量中的文件夹位置。
默认情况下,分配给 $env:PSModulePath
的有效位置为:
系统范围的位置:这些文件夹包含 PowerShell 附带的模块。这些模块存储在
$PSHOME\Modules
位置。此外,这是 Windows 管理模块的安装位置。
用户安装的模块:这些是由用户安装的模块。 Install-Module
有一个Scope 参数,允许您指定是为当前用户还是为所有用户安装模块。有关详细信息,请参阅安装模块。
- 在 Windows 上,用户特定的 CurrentUser 范围的位置是
$HOME\Documents\PowerShell\Modules
文件夹。 AllUsers 范围的位置是$env:ProgramFiles\PowerShell\Modules
。
$HOME/.local/share/powershell/Modules
文件夹。 AllUsers 范围的位置是 /usr/local/share/powershell/Modules
。此外,在其他目录(例如 Program Files 目录)中安装模块的安装程序可以将其位置附加到 $env:PSModulePath
的值中。
有关详细信息,请参阅 about_PSModulePath。
PSModuleAnalysisCachePath
PowerShell 提供对用于缓存有关模块及其 cmdlet 的数据的文件的控制。缓存在启动时搜索命令时读取,并在导入模块后的某个时间在后台线程上写入。
缓存的默认位置是:
- Windows PowerShell 5.1:
$env:LOCALAPPDATA\Microsoft\Windows\PowerShell
$env:LOCALAPPDATA\Microsoft\PowerShell
~/.cache/powershell
缓存的默认文件名是ModuleAnalysisCache
。当安装了多个 PowerShell 实例时,文件名包含十六进制后缀,以便每个安装都有唯一的文件名。
笔记
如果命令发现无法正常工作,例如 IntelliSense 显示不存在的命令,您可以删除缓存文件。下次启动 PowerShell 时会重新创建缓存。
要更改缓存的默认位置,请在启动 PowerShell 之前设置环境变量。该值应命名 PowerShell 有权创建和写入文件的完整路径(包括文件名)。
对此环境变量的更改仅影响子进程。有关创建持久环境变量的信息,请参阅前面的部分。
要禁用文件缓存,请将此值设置为无效位置,例如:
# `NUL` here is a special device on Windows that can't be written to,
# on non-Windows you would use `/dev/null`
$env:PSModuleAnalysisCachePath = 'NUL'
这将设置 NUL 设备的路径。 PowerShell 无法写入路径,但不会返回错误。您可以使用跟踪器查看报告的错误:
Trace-Command -PSHost -Name Modules -Expression {
Import-Module Microsoft.PowerShell.Management -Force
}
PSDisableModuleAnalysisCacheCleanup
写出模块分析缓存时,PowerShell 会检查不再存在的模块,以避免不必要的大缓存。有时这些检查并不理想,在这种情况下,您可以通过将此环境变量值设置为 1
来关闭它们。
设置此环境变量将对当前进程中的后续清理事件生效。为了确保在启动时禁用清理,您必须在启动 PowerShell 之前设置环境变量。有关创建持久环境变量的信息,请参阅前面的部分。
PowerShell 使用的其他环境变量
路径信息
路径
$env:PATH
环境变量包含操作系统搜索可执行文件的文件夹位置列表。在 Windows 上,文件夹位置列表由分号 (;
) 字符分隔。在非 Windows 平台上,冒号 (:
) 分隔环境变量中的文件夹位置。路径文本
$env:PATHEXT
变量包含 Windows 认为是可执行文件的文件扩展名列表。从 PowerShell 执行具有所列扩展名之一的脚本文件时,该脚本将在当前控制台或终端会话中运行。如果未列出文件扩展名,则脚本将在新的控制台会话中运行。要确保其他脚本语言的脚本在当前控制台会话中运行,请添加该脚本语言使用的文件扩展名。例如,要在当前控制台中运行Python脚本,请将
.py
扩展名添加到环境变量中。要使 Windows 支持.py
扩展名作为可执行文件,您必须使用 CMD 命令 shell 的ftype
和assoc
命令注册文件扩展名。 PowerShell 没有直接方法来注册文件处理程序。有关更多信息,请参阅 ftype 命令的文档。PowerShell 脚本始终在当前控制台会话中启动。您不需要添加
.PS1
扩展名。XDG 变量
在非 Windows 平台上,PowerShell 使用 XDG 基本目录规范定义的以下 XDG 环境变量。
- XDG_CONFIG_HOME
- XDG_DATA_HOME
- XDG_CACHE_HOME
终端特点
从 PowerShell 7.2 开始,以下环境变量可用于控制虚拟终端功能,例如对输出进行着色的 ANSI 转义序列。可以使用 TERM 或 NO_COLOR 环境变量关闭对 ANSI 转义序列的支持。
期限
以下
$env:TERM
值会更改行为,如下所示:dumb
- 设置$Host.UI.SupportsVirtualTerminal=$false
xterm-mono
- 设置$PSStyle.OutputRendering=PlainText
xtermm
- 设置$PSStyle.OutputRendering=PlainText
NO_COLOR
如果 $env:NO_COLOR
存在,则 $PSStyle.OutputRendering
设置为 PlainText。有关 NO_COLOR 环境变量的更多信息,请参阅 https://no-color.org/。
参见
- about_Environment_Provider
- about_个人资料
- about_变量
- 环境方法
猜你还喜欢
- 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