powershell - Env : and [System. Environment] 有什么区别?

标签 powershell

@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-ChildItemGet-ContentSet-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/

相关文章:

powershell - 将按钮添加到 NotifyIcon

外部命令静默失败的 Powershell 错误

sharepoint - 如何让 SharePoint PowerShell 使用 .NET 2

powershell - 如何使用 AAD+MultiFactorAuth 调用 sqlcmd(或 sqlcmd.exe)

sql-server - 使用powershell在sql server中创建包含记录的表: what's best?

Powershell cmdlet 输出未显示

powershell - 使用数组作为哈希表中的键

powershell - 我的 powershell 脚本在我预期的输出之前打印了 '1'。为什么?

windows - AppFabric Powershell 新缓存异常

windows - 在 PowerShell 中重置 session