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

kit*_*fox 56 powershell

我开始使用PowerShell,并试图找出如何echo通过控制台的系统环境变量来读取它.

以下两者都不起作用.第一个只打印%PATH%,第二个打印没有.

echo %PATH%
echo $PATH
Run Code Online (Sandbox Code Playgroud)

Mat*_*sen 99

使用以下命令作为变量名前缀env:

$env:path
Run Code Online (Sandbox Code Playgroud)

您还可以通过env驱动器枚举所有变量:

Get-ChildItem env:
Run Code Online (Sandbox Code Playgroud)

  • 我自己喜欢`$ Env:Path.Split(';')`(每行输出一个目录)。 (12认同)
  • 简而言之,使用 `gci env:` (6认同)
  • 当然,或者`$env:Path -split ';'` (3认同)
  • @AmirKatz 输出是相同的,因为这两个操作执行完全相同的操作:) `-split` 是正则表达式运算符,`String.Split()` 不是 (2认同)
  • @navigaid `get-alias` 列出了更多,包括 `gal` (可以通过 `get-alias | where {$_.Name -like '*al*'}` 找到,此外 `gal | gm` 显示所有属性名称 `where` 可以进行过滤。`get-command` (`gcm`)、`get-help` (`help`)、`help gcm` 和 `help help` 也可能有帮助。 (2认同)

小智 15

我认为以下效果最好:

Get-Item Env:PATH
Run Code Online (Sandbox Code Playgroud)
  1. Get-ChildItem它更短,因此比(环境变量没有层次结构)更容易记住。
  2. 该命令与使用 Powershell 设置环境变量的方法之一是对称的。(前任:Set-Item -Path env:SomeVariable -Value "Some Value"
  3. 如果您养成了这样做的习惯,您就会记住如何列出所有环境变量:只需省略条目部分即可。(前任:Get-Item Env:

我一开始发现语法很奇怪,但在我理解Providers的概念后,事情开始变得更有意义。本质上,PowerShell 允许您以类似于文件系统的方式导航系统的不同组件。

后面的冒号有什么意义Env:?尝试列出通过提供商提供的所有“驱动器”,如下所示:

PS> Get-PSDrive
Run Code Online (Sandbox Code Playgroud)

我只看到一些结果(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
Run Code Online (Sandbox Code Playgroud)


not*_*bit 10

除了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
...
Run Code Online (Sandbox Code Playgroud)

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


arm*_*rer 8

作为对其他答案的补充,

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

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

Get-ChildItem Env:
Run Code Online (Sandbox Code Playgroud)

或者

dir Env:
Run Code Online (Sandbox Code Playgroud)

或者

ls Env:
Run Code Online (Sandbox Code Playgroud)

或者

gci Env:
Run Code Online (Sandbox Code Playgroud)

更多信息请参见shellgeek


此外,作为一个实际用例,您可以获得基于NameValue类似的按字母顺序排序的环境变量列表:

Get-ChildItem Env: | Sort Name
Run Code Online (Sandbox Code Playgroud)

或者

Get-ChildItem Env: | Sort Value
Run Code Online (Sandbox Code Playgroud)

仅供参考:您不能在上述命令中替换Get-ChildItem Env:Get-Item Env:(列表不会排序并保持不变)。因此,在这种情况下,可能比BitBite在这个答案中提到的Get-ChildItem更受欢迎。Get-Item

最后,您可以对环境变量的特定记录的值进行排序,如下所示:

(Get-ChildItem Env:PATH).Value.Split(';') | Sort
Run Code Online (Sandbox Code Playgroud)


Foo*_*Bar 7

我自己也遇到过这个。我想查看路径,但每个路径都在单独的行上。这会打印出路径,并用分号将其分隔。

$env:path.Split(";")