Env:和[System.Environment]有什么区别?

时间:2018-09-15 19:12:54

标签: powershell

how to sort a txt file in specific order in Powershell中给出@mklement的好答案,这让我感到奇怪...

[System.Environment][Environment]::NewLine有什么区别?

为什么$Env:NewLine可用,但是null不存在?

1 个答案:

答案 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-ChildItemGet-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:\