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

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

echo %PATH%
echo $PATH

在变量名前加上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

它更短,因此比Get-ChildItem更容易记住(没有环境变量的层次结构)。 该命令与Powershell中用于设置环境变量的一种方法对称。(EX: Set-Item -Path env:SomeVariable -Value "Some Value") 如果您养成了这样做的习惯,您将记住如何列出所有环境变量:只需省略条目部分。(例如: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》(" ")


作为对其他答案的补充,

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

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

Get-ChildItem Env:

or

dir Env:

or

ls Env:

or

gci Env:

更多信息见shellgeek。


另外,作为一个实际的用例,你可以得到一个基于名称或值的按字母顺序排序的环境变量列表,如下所示:

Get-ChildItem Env: | Sort Name

or

Get-ChildItem Env: | Sort Value

供您参考:在上述命令中,不能将Get-ChildItem Env:替换为Get-Item Env:(列表将不会排序,保持不变)。因此,在这种情况下,Get-ChildItem可能优先于BitBite回答中提到的Get-Item。

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

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