鉴于@mklement在how to sort a txt file in specific order in Powershell中的好答案,这让我感到奇怪...
Env:[System.Environment]有什么区别?

为什么[Environment]::NewLine可用,但$Env:NewLine不存在?

最佳答案

[System.Environment] is the .Net framework's static environment class。它提供了与“环境”相关的静态方法,包括获取环境变量的方法。
$env:WHATEVER是一种特殊的变量语法,您可以使用变量语义访问PSProvider的内容。

What is a PSProvider?(另请参见about_Providers)

从根本上讲,这是一种通过类似于文件系统的单一接口(interface)访问分层数据存储的方法。

实际上FileSystem本身就是PowerShell中的PSProvider,这就是为什么处理文件的cmdlet不提及文件(即Get-ChildItemGet-ContentSet-Location等)的原因。

要查看可用的提供程序,请使用 Get-PSProvider :



使用 Get-PSDrive 可以看到驱动器本身:


Environment还是PSProvider,可以通过尝试导航到其PSDrive来看到它:

Set-Location Env:

或浏览它:
Get-ChildItem Env:

甚至获取其内容:
Get-Content Env:\COMPUTERNAME
Get-ChildItem Env: | Get-Content

特殊的变量语法是访问某些PSProviders的一种简便方法(它们并不全都支持它),并且最常与Environment一起使用(我敢猜测这是专门为Environment创建的语法)。

该语法实际上对文件系统有效,但是很尴尬
${C:\users\briantist\test.txt}

制表符补全不适用于该语法。

如果您尝试使用注册表提供程序之类的工具,它将显示制表符,但会在运行时抛出一个未实现的异常(exception)。

这是一个有趣的无用的方法:使用Variable:\提供程序:
$test = 'test'
$Variable:test

关于powershell - Env:和[System.Environment]有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52348032/

10-12 23:01