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

我开始使用PowerShell,并试图弄清楚如何echo系统环境变量到控制台来读取它。

下面两个都不行。第一个只打印%PATH%,第二个什么也不打印。

echo %PATH%
echo $PATH
251931 次浏览

env作为变量名的前缀:

$env:path

例如,如果你想打印环境值“minishift_username”的值,那么命令将是:

$env:MINISHIFT_USERNAME

你也可以通过env驱动器枚举所有变量:

Get-ChildItem env:

除了马蒂亚斯的回答。

虽然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
...

这些还包括您可能在概要文件启动脚本中设置的内容。

在我看来,以下方法效果最好:

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

我只看到几个结果(别名,C,证书,D,环境,功能,HKCU, HKLM,变量,WSMan)。很明显,Env只是一个特定的“驱动器”,冒号是任何使用过Windows的人都熟悉的语法。

你可以像这样遍历驱动器:

Get-ChildItem C:\Windows
Get-Item C:
Get-Item Env:
Get-Item HKLM:
Get-ChildItem HKLM:SYSTEM

这是我自己看到的。我想看路径,但是每条路径都在一条单独的线上。这将打印路径,并以分号分隔。

$env:path.Split(";")

作为对其他答案的补充,

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

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

Get-ChildItem Env:

dir Env:

ls Env:

gci Env:

更多信息在shellgeek


另外,作为一个实际的用例,你可以得到一个按字母顺序排序的环境变量列表,就像这样:

Get-ChildItem Env: | Sort Name

仅供参考:在上面的命令中,不能用Get-Item Env:替换Get-ChildItem Env:。因此,在这种情况下,GetChild-Item将优先于这是BitBite的答案中提到的Get-Item