如何在PowerShell中将环境变量打印到控制台?

387

我开始使用 PowerShell,正在尝试弄清如何将系统环境变量echo到控制台以读取它。

以下两种方法都不起作用。第一种只打印%PATH%,第二种则什么都不打印。

echo %PATH%
echo $PATH

39
输出环境变量Path的值。 - EBGreen
5个回答

574

将变量名以env作为前缀:

$env:path

例如,如果你想打印环境变量MINISHIFT_USERNAME的值,那么命令将会是:
$env:MINISHIFT_USERNAME

你也可以通过 env 驱动程序枚举所有变量:
Get-ChildItem env:

61
我自己喜欢使用 $Env:Path.Split(';')(每行输出一个目录)。 - Bill_Stewart
7
当然,或者 $env:Path -split ';' - Mathias R. Jessen
4
输出结果相同,因为这两个操作实际上做的是相同的事情 :) -split 是一个正则表达式运算符,String.Split() 不是。 - Mathias R. Jessen
9
简化使用 gci env: 的命令。 - btwiuse
2
@navigaid get-alias 列出更多内容,包括 gal(可以通过 get-alias | where {$_.Name -like '*al*'} 找到),此外 gal | gm 显示所有属性名称,where 可以过滤。get-command (gcm)、get-help (help)、help gcmhelp help 也可能有所帮助。 - samus
我在 Mac 上不得不使用 $env:PATH,其中 PATH 是大写的。 - Aitor Aznar Álvarez

15
我个人认为以下方法最有效:

{{在我的观点中,以下方法最为适用:}}

Get-Item Env:PATH
  1. 它比Get-ChildItem更短,因此更容易记忆(环境变量没有层次结构)。
  2. 该命令与使用Powershell设置环境变量的方式之一是对称的。 (例如:Set-Item -Path env:SomeVariable -Value "Some Value"
  3. 如果你养成这种习惯,你会记得如何列出所有环境变量:只需省略条目部分即可。(例如:Get-Item Env:

起初我觉得语法很奇怪,但在理解提供程序的概念后,事情开始变得更有意义了。基本上,PowerShell使您能够以类似于文件系统的方式浏览系统的不同组件。

Env:中的冒号有什么意义?尝试像这样列出通过提供程序可用的所有“驱动器”:

PS> Get-PSDrive

我只看到了一些结果(Alias、C、Cert、D、Env、Function、HKCU、HKLM、Variable、WSMan)。很明显,Env只是一个特定的“驱动器”,冒号语法对于任何使用过Windows的人来说都是熟悉的。
您可以像这样遍历驱动器:
Get-ChildItem C:\Windows
Get-Item C:
Get-Item Env:
Get-Item HKLM:
Get-ChildItem HKLM:SYSTEM

14
除了Mathias的回答之外。
虽然OP没有提到,但如果您还需要查看与Powershell特定/相关的内部变量,则需要使用Get-Variable
$ Get-Variable

Name                           Value
----                           -----
$                              name
?                              True
^                              gci
args                           {}
ChocolateyTabSettings          @{AllCommands=False}
ConfirmPreference              High
DebugPreference                SilentlyContinue
EnabledExperimentalFeatures    {}
Error                          {System.Management.Automation.ParseException: At line:1 char:1...
ErrorActionPreference          Continue
ErrorView                      NormalView
ExecutionContext               System.Management.Automation.EngineIntrinsics
false                          False
FormatEnumerationLimit         4
...

这些还包括您可能在配置文件启动脚本中设置的东西。


7

我自己也遇到了这个问题。我想查看路径,但是每个路径需要单独显示在一行上。这段代码会打印出路径,并通过分号拆分路径:

$env:path.Split(";")


6

作为其他答案的补充,

在列出所有环境变量的情况下,为了简洁命令,您可以使用dirlsgci(Get-ChildItem的缩写),因为它们是Get-ChildItem的三个别名。

因此,在这种情况下,以下所有命令都是相等的,可以使用:

Get-ChildItem Env:

或者
dir Env:


ls Env:

或者
gci Env:

更多信息请查看 shellgeek


另外,作为一个实用案例,你可以按字母顺序获取环境变量的列表,根据 NameValue 进行排序,像这样:

Get-ChildItem Env: | Sort Name


Get-ChildItem Env: | Sort Value
FYI: 在上述命令中,您不能使用Get-Item Env: 替换Get-ChildItem Env:(列表不会排序并保持不变)。因此,在这种情况下,Get-ChildItem 可能优于BitBite的此答案中提到的Get-Item

最后,您可以像这样对环境变量的特定记录的值进行排序:

(Get-ChildItem Env:PATH).Value.Split(';') | Sort

目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - mohammad mobasher
谢谢,@mohammad。我尝试让这个答案更清晰。希望能有所帮助。 - armanexplorer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接