鉴于@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-ChildItem
,Get-Content
,Set-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/