我需要在运行时在PowerShell脚本中显示所有配置的环境变量。通常,在显示环境变量时,我只能在外壳中使用以下一种技术(以及其他技术,但这些技术都很简单):
gci env:*
ls Env:
但是,我有一个从另一个程序调用的脚本,当我在该脚本中使用上述调用之一时,我得到的不是环境变量及其值,而是System.Collections.DictionaryEntry
类型的列表,而不是变量及其值。在PowerShell脚本中,如何显示所有环境变量?
我需要在运行时在PowerShell脚本中显示所有配置的环境变量。通常,在显示环境变量时,我只能在外壳中使用以下一种技术(以及其他技术,但这些技术都很简单):
gci env:*
ls Env:
但是,我有一个从另一个程序调用的脚本,当我在该脚本中使用上述调用之一时,我得到的不是环境变量及其值,而是System.Collections.DictionaryEntry
类型的列表,而不是变量及其值。在PowerShell脚本中,如何显示所有环境变量?
9条答案
按热度按时间to94eoyn1#
较短版本:
这将同时显示名称和值。
yfwxisqw2#
最短版本(变量按名称排序):
uttx8gqw3#
我最终笨手笨脚地找到了一个解决方案,迭代了词典中的每个条目:
dgiusagp4#
带通配符的简短版本过滤器:
elcex8rz5#
我认为所提供的任何答案都与问题无关。OP获取的是对象类型的列表(每个成员的对象类型都相同),而不是实际的变量名称和值。这就是你要找的东西:
简称:
jogvjijk6#
此命令也适用:
g0czyy6m7#
tl;dr
由于您正在寻找环境-变量名称-值对的友好字符串表示:
oss
是Out-String -Stream
的内置 Package 函数,因此将每个名称-值对作为其自己的字符串返回;通过管道连接到Out-String
(没有-Stream
)以获得一个单行、多行字符串(尽管它总是意外地有一个尾随换行符-请参见GitHub issue #14444)。要在PowerShell中列出所有环境变量的名称和值**,按名称排序,[1]使用
Get-ChildItem
cmdlet(其内置别名为gci
)列出env:
PowerShell drive的内容(子项):**以上输出对象,即
[System.Collections.DictionaryEntry]
**的示例,将每个变量描述为名称-值对,具有.Key
(.Name
)和.Value
属性。PowerShell的for-display formatting system会自动将它们呈现为友好的两列格式。USERNAME
,最简单的方法是使用namespace variable notation:如果您使用(可能隐含的)
.ToString()
来为这些对象添加字符串:'System.Collections.DictionaryEntry'
'[<name>, <value>]'
%
是ForEach-Object
cmdlet的内置别名):如果您想使用友好的两栏格式将它们列成字符串*,就像打印到显示器上一样**,请使用
Out-String
cmdlet:注意:如果在不使用
-Stream
的情况下使用Out-String
,您将得到一个单行、多行字符串作为输出,但请注意它将有一个尾随换行符。[2][1]请注意,将
Get-ChildItem
/gci
与env:*
一起使用,即在驱动器规范env:
之后使用通配符*
-不仅对于获取all变量是不必要的,而且实际上会导致未排序输出。[2]就像在GitHub issue #14444中讨论的那样,总是附加一个尾随的换行符是有问题的
aemubtdh8#
有几种方法可以获取PowerShell中的所有环境变量
按名称获取环境变量
zbdgwd5y9#
如果您使用的是PowerShell Core(6或更高版本)(pwsh:https://github.com/PowerShell/PowerShell),您也可以使用
ls env: