@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)
它基本上是一种通过类似于文件系统的单一界面访问分层数据存储的方法。
事实上 FileSystem
本身就是 PowerShell 中的一个 PSProvider,这就是为什么处理文件的 cmdlet 不提及文件(即:Get-ChildItem
,Get-Content
、Set-Location
等)。
要查看可用的提供商,请使用 Get-PSProvider
:
Name Capabilities Drives ---- ------------ ------ Registry ShouldProcess, Transactions {HKLM, HKCU} Alias ShouldProcess {Alias} Environment ShouldProcess {Env} FileSystem Filter, ShouldProcess, Credentials {A, C, D, P...} Function ShouldProcess {Function} Variable ShouldProcess {Variable} Certificate ShouldProcess {Cert} WSMan Credentials {WSMan}
使用Get-PSDrive
只查看驱动器本身:
Name Used (GB) Free (GB) Provider Root ---- --------- --------- -------- ---- A 103.23 46.58 FileSystem A:\ Alias Alias C 200.02 22.77 FileSystem C:\ Cert Certificate \ D 1048.88 2677.13 FileSystem D:\ Env Environment Function Function HKCU Registry HKEY_CURRENT_USER HKLM Registry HKEY_LOCAL_MACHINE O 49.34 10.16 FileSystem O:\ P 335.32 176.50 FileSystem P:\ S FileSystem S:\ Variable Variable WSMan WSMan
Environment
也是一个 PSProvider,您可以通过尝试导航到它的 PSDrive 来查看它:
Set-Location Env:
或者浏览它:
Get-ChildItem Env:
甚至获取其内容:
Get-Content Env:\COMPUTERNAME
Get-ChildItem Env: | Get-Content
特殊变量语法是访问某些 PSProvider 的一种简写方式(它们并不都支持它),它最常与环境一起使用(我敢猜测语法是专门为环境创建的)。
该语法确实适用于文件系统,但它非常笨拙
${C:\users\briantist\test.txt}
制表符补全不能正确使用该语法。
如果您尝试使用注册表提供程序之类的东西,它会完成选项卡,但在您运行它时会抛出一个关于它没有被实现的异常。
这是一个有趣但无用的方法:使用 Variable:\
provider:
$test = 'test'
$Variable:test
关于powershell - Env : and [System. Environment] 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52348032/