在how to sort a txt file in specific order in Powershell中给出@mklement的好答案,这让我感到奇怪...
[System.Environment]
和[Environment]::NewLine
有什么区别?
为什么$Env:NewLine
可用,但是null
不存在?
答案 0 :(得分:5)
[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
,{{1} }等。
要查看可用的提供程序,请使用Get-PSProvider
:
Set-Location
使用Get-PSDrive
仅查看驱动器本身:
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}
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
也是PSProvider,您可以通过尝试导航到其PSDrive来看到它:
Environment
或浏览:
Set-Location Env:
甚至获取其内容:
Get-ChildItem Env:
特殊变量语法是访问某些PSProviders(它们都不全都支持)的一种快捷方式,并且最常与Environment一起使用(我敢猜测这是专门为Environment创建的语法)。 / p>
该语法实际上适用于文件系统,但是很尴尬
Get-Content Env:\COMPUTERNAME
Get-ChildItem Env: | Get-Content
使用该语法无法正确完成制表符
。如果您尝试使用注册表提供程序之类的工具,它将显示Tab键,但会在运行时抛出一个未实施的例外。
这是一个有趣的无用的方法:使用${C:\users\briantist\test.txt}
提供程序:
Variable:\