首页 > 系统相关 >(22)Powershell中的环境变量

(22)Powershell中的环境变量

时间:2024-01-28 17:11:21浏览次数:25  
标签:Files 22 更改 环境变量 env PowerShell Powershell

(22)Powershell中的环境变量

本节介绍Powershell 中环境变量的查看和使用,主要包括以下内容:

  1. 为什么要设置环境变量。

  2. Powershell 中环境变量的查看。

  3. Powershell 中环境变量的更改。

  4. 总结


1. 为什么要设置环境变量

使用过 Java 语言的一定知道在安装完 JDK 之后要配置环境变量JAVA_HOME、CLASSPATH、PATH , 其目的就是使其指向 JDK 的bin 目录,这样子在控制台中编译,或是在其他路径下执行Java 程序时,无需指定一长串的bin 路径。


环境变量存储了操作系统环境相关的信息(由操作系统和其他程序使用的数据)。此信息包括操作系统路径、操作系统使用的处理器的数量以及临时文件夹的位置等详细信息。例如,WINDIR 环境变量包含 Windows 安装目录的位置。程序可以查询此变量的值以确定 Windows 操作系统文件的位置。由此可见,设置环境变量的好处是多个独立的程序共享该变量所代表的值。


PowerShell 也可以查看和更改 Windows 环境变量,包括在注册表中设置的变量以及为特定会话设置的变量。PowerShell Environment 模块简化了这个过程,使查看和更改环境变量变得更容易。


与 PowerShell 中其他类型的变量不同,环境变量和它们的值由子会话(如本地后台作业和运行模块成员的会话)来继承。这就使环境变量非常适合存储父会话和子会话中都需要的值。通俗点将就是在比如在脚本A的开始处设置了某个环境变量,而脚本B 调用脚本A ,则在脚本 B 或是调用 B 的脚本中都有效。


2.Powershell 查看环境变量

PowerShell Environment 模块提供并简化了对环境变量的访问。可以在 PowerShell 的Windows PowerShell 驱动器(Env: 驱动器)中访问 Windows 环境变量。

此驱动器与文件系统驱动器非常相似。例如可以通过cmd命令访问环境变量:

PS C:\test>  cd env:

PS Env:\> DIR

Name                           Value                                                                                                                 
----                           -----                                                                                                                 
__PSLockDownPolicy             0                                                                                                                     
ALLUSERSPROFILE                C:\ProgramData                                                                                                        
APPDATA                                                                                                     
CommonProgramFiles             C:\Program Files\Common Files                                                                                         
CommonProgramFiles(x86)        C:\Program Files (x86)\Common Files                                                                                   
CommonProgramW6432             C:\Program Files\Common Files                                                                                         
COMPUTERNAME                   DLC5CG1464WOPL                                                                                                        
ComSpec                        C:\WINDOWS\system32\cmd.exe                                                                                           
DriverData                     C:\Windows\System32\Drivers\DriverData                                                                                
HOMEDRIVE                      C:                                 

以上环境变量中的 Path 大家肯定比较熟悉。以上命令中的 cd 其实是 Set-Location 命令的别名,dir 是 Get-ChildItem 的别名。可以通过我们之前讲过的 Get-Alias 命令来验证,例如:

PS Env:\> Get-Alias cd

CommandType     Name                                               Version    Source                                                                 
-----------     ----                                               -------    ------                                                                 
Alias           cd -> Set-Location                                                                                                                   



PS Env:\> Get-Alias Dir

CommandType     Name                                               Version    Source                                                                 
-----------     ----                                               -------    ------                                                                 
Alias           dir -> Get-ChildItem                                                                                                                 

所以也可以通过以下 Powershell 命令查看环境变量:

PS Env:\> Set-Location env:

PS Env:\> Get-ChildItem

Name                           Value                                                                                                                 
----                           -----                                                                                                                 
__PSLockDownPolicy             0                                                                                                                     
ALLUSERSPROFILE                C:\ProgramData                                                                                                        
APPDATA                                                                                                         
CommonProgramFiles             C:\Program Files\Common Files                                                                                         
CommonProgramFiles(x86)        C:\Program Files (x86)\Common Files                                                                                   
CommonProgramW6432             C:\Program Files\Common Files                                                                                         
COMPUTERNAME                   DLC5CG1464WOPL                                                                                                        
ComSpec                        C:\WINDOWS\system32\cmd.exe                                                                                           
DriverData                     C:\Windows\System32\Drivers\DriverData                                                                                
HOMEDRIVE                      C: 

在 PowerShell 中,每个环境变量都通过 System.Collections.Dictionary Entry 类的实例的对象来表示。在每个 DictionaryEntry 对象中,环境变量的名称为键(Key),环境变量的值为键值(Value)。

所以在 PowerShell 可以通过环境变量的键来获取对应的值,例如:

PS Env:\> Get-ChildItem env:path

Name                           Value                                                                                                                 
----                           -----                                                                                                                 
Path                           C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:...

3. Powershell更改环境变量

在 PowerShell 中更改环境变量时(通过在命令行更改),所做的更改仅影响当前会话。当前会话关闭,所做的更改将会丢失。需要注意的是,在命令行中更改环境变量时,需要以管理员权限执行命令。

如果要对环境变量进行永久性更改,可以使用“控制面板”中的“系统”(“高级”选项卡或“高级系统设置”选项)将更改存储在注册表中。也可以把更改添加倒 PowerShell 配置文件中。

可以使用以下语法,在不使用 cmdlet 的情况下更改环境变量的值(注意变量名称不包含$符号):

PS Env:\> $env:path = $env:path + ";c:\temp"

以上语句将 ";c:\temp"追加到 Path 环境变量的值中。也可以使用 Set-Item、Remove-Item 和 Copy-Item 等 Item cmdlet 来更改环境变量的值。例如:

set-item -path env:path -value ($env:path + ";c:\temp")

可以使用以下命令把所做的更改添加到 Powershell 配置文件中:

add-content -path $profile.CurrentUserAllHosts -value '$env:path = $env:path + ";c:\temp"'

举一个在实际应用中的例子。比如为了安全考虑,公司内部的某个程序需要通过代理(Proxy)来访问外部的某个服务器,而又不想让其他的程序也使用该Proxy,所以可以在启动该程序之前先设置环境变量 Proxy ,这样该程序就可以正常连接外部的网络,由于该Proxy 是在会话层面配置的,所以当该程序关闭时,设置的proxy也自动失效。所以可以在调用程序之前,加入以下语句:

PS Env:\> $myProxy = "192.125.12.18"
if( ($proxy -eq $null ) -or ($proxy -eq "") )
{
    $env:proxy = $myProxy
    Write-Verbose "the proxy has been set to $myProxy"
}

由于应用的升级以及出于安全方面的考虑,该 Proxy 有可能发生变化,所以实际使用时,会把该$myProxy 的值存储在数据中,即在启动应用程序之前,脚本会先在数据中查询该Proxy的值(会在后续文章中分享通过Powershell连接数据库以及执行sql语句),然后再添加到环境变量中,实现应用程序的可配置性:以后如果需要需要更改proxy,只需执行 update sql语句,无需对脚本进行更改。


总结

Powershell对环境变量的操作非常方便,利用数据库,可以使脚本实现可配置性。

标签:Files,22,更改,环境变量,env,PowerShell,Powershell
From: https://www.cnblogs.com/zhang-snail/p/17993025

相关文章

  • 1.22-1.28 部分补题
    [蓝桥杯2016省A]密码脱落题意:给定一个回文串,但是有一些字母消失不见了。问:至少补全多少个字母,使得字符串变回回文串最开始想一个一个枚举,但是无论怎么写都是错的。后来被提醒回文串的特性,反转之后还是一样的。所以要求最少的需要补全的字母,直接求一个正着和反着的字符串......
  • (21)Powershell中的通配符
    (21)Powershell中的通配符1.使用通配符进行文件的模糊查找Powershell中的通配符可以实现模糊查找,也就是说可以对一组项(而不是单个项)进行查找。例如,如果想查找D:\MyPowerShell目录中所有扩展名为.ps1的文件,可以执行以下命令:PSC:\test>Get-ChildItemC:\test\*.ps1......
  • (20)Powershell中的特殊运算符
    (20)Powershell中的特殊运算符Powershell中除了常见的算术运算符,赋值运算符,比较运算符,位运算符,逻辑运算符,字符串的拆分和合并运算符,转义字符,还有一些特殊的运算符,这些特殊的运算符往往可以解决一些特殊的问题,比如执行运行命令,更改值的数据类型等。1.&(调用运算符)使用&(......
  • INFINI Labs 产品更新 | 统一版本号 1.22.0
    INFINILabs产品又更新啦~,包括Console,Gateway,Loadgen,Agent1.22.0。为了避免版本不同带来的困扰,以后发布均统一版本号,此次版本重点修复历史遗留Bug、优化内存占用等。以下是本次更新的详细说明。INFINIConsolev1.22.0INFINIConsole是一款非常轻量级的多集群、跨版本的搜......
  • CentoS中更改ssh默认端口22
    在Centos中更改ssh默认端口22为其他端口在开始配置前,先关闭防火墙systemctl stopfirewalld.service#停止systemctldisablefirewalld.service#禁止开机启动更改ssh配置文件:vi/etc/ssh/sshd_config    注意:在不熟练操作情况下保留22端口防止不能登录,第二个就......
  • 【专题】2022中国工业机器人市场研究报告PDF合集分享(附原数据表)
    报告链接:https://tecdat.cn/?p=33224本报告合集将基于中国工业产业升级和智能制造的背景,通过对供应端市场和产业链的分析,结合投资视角,探讨工业机器人企业如何增强自身竞争力,推动中国工业产业发展,为企业带来新的增长和转型机会,并从而思考中国工业机器人行业的现状和未来趋势。阅读......
  • (2024.1.22-2024.1.28)C语言学习小结
    本周主要围绕《HeadfirstC》这本书展开C语言学习,按照计划,我学习了前四章的内容。基本内容以下时学习做的思维导图(笔记)第1章虽然做的是思维导图,但实际上因为大多数内容已经掌握,所以实际上就是补充记了几个零散的点。第2、2.5章主要是指针、数组、字符串的内容,大多也已经......
  • PowerShell编写Windows服务器的DDNS-ipv6客户端
    这个代码保存成ddnsv6.fm20.cn.ps1就能正常运行了functionGet-GUID(){#指定注册表路径$path="HKLM:\Software\Firadio\ddnsv6.fm20.cn"#如果注册表路径不存在则创建if(-not(Test-Path$path)){New-Item-Force-Path$path>$null}......
  • 环境变量管理工具Modules的安装
    一、软件依赖tcl软件(1)tcl下载地址:http://www.tcl-lang.org/software/tcltk/(2)编译安装cdunix/./configure--prefix=/usr/local/tcl(aptinstalltcltcl-dev)二、编译安装modules软件(1)下载地址:  https://modules.sourceforge.net/(2)解压安装:(apt-getinstallenvironme......
  • ClickHouse(22)ClickHouse集成HDFS表引擎详细解析
    HDFS这个引擎提供了与ApacheHadoop生态系统的集成,允许通过ClickHouse管理HDFS上的数据。这个引擎提供了Hadoop的特定功能。用法ENGINE=HDFS(URI,format)URI参数是HDFS中整个文件的URIformat参数指定一种可用的文件格式。执行SELECT查询时,格式必须支持输入,以及执行INSE......