PowerShell 中的 equals 机制如何工作才能看到空结果?

PowerShell 中的 equals 机制如何工作才能看到空结果?

对于以下 PowerShell 管道(基于这个答案):

(Get-Command Get-ChildItem).Parameters.Values |
    where aliases |
    select Aliases, Name

我得到了别名和相应的非缩写开关参数的列表,如下所示:

Aliases  Name  
-------  ----  
{ad, d}  Directory  
{af}     File  
{ah, h}  Hidden  
{ar}     ReadOnly  
{as}     System  
{db}     Debug  
{ea}     ErrorAction  
{ev}     ErrorVariable  
{infa}   InformationAction  
{iv}     InformationVariable  
{ob}     OutBuffer  
{ov}     OutVariable  
{PSPath} LiteralPath  
{pv}     PipelineVariable  
{s}      Recurse  
{usetx}  UseTransaction  
{vb}     Verbose  
{wa}     WarningAction  
{wv}     WarningVariable  

当我更改where Aliaseswhere Aliases -eq null查看那些没有定义别名的 switch 参数时,我没有得到任何结果。我试过了,where Aliases -eq {}但也没有结果。我知道没有别名的 switch 参数是存在的;例如Force, Depth, Attributes等等。

上面的‘平等’机制如何运作?

答案1

始终Aliases是一个集合。使用

(Get-Command Get-ChildItem).Parameters.Values |
   Where-Object {$_.Aliases.Count -eq 0} |
      Select-Object Aliases, Name
Aliases Name
------- ----
{}      Path
{}      Filter
{}      Include
{}      Exclude
{}      Depth
{}      Force
{}      Name
{}      Attributes

答案2

嗯,众所周知,在 PowerShell 中有多种方法可以完成任务。

这里有一个略有不同的方法来获取您的用例的结果。然而 JosefZ 的答案更直接。这完全取决于个人喜好。

(Get-Command Get-ChildItem).Parameters.Values | 
Select-Object -Property Name, @{
    Name       = 'Aliases'
    Expression = {$PSitem.Aliases}
} | Where-Object -Property Aliases -NE $null


# Results

Name                Aliases
----                -------
LiteralPath         PSPath 
Recurse             s      
Verbose             vb     
Debug               db     
ErrorAction         ea     
WarningAction       wa     
InformationAction   infa   
ErrorVariable       ev     
WarningVariable     wv     
InformationVariable iv     
OutVariable         ov     
OutBuffer           ob     
PipelineVariable    pv     
UseTransaction      usetx  
Directory           {ad, d}
File                af     
Hidden              {ah, h}
ReadOnly            ar     
System              as     



(Get-Command Get-ChildItem).Parameters.Values | 
Select-Object -Property Name, @{
    Name       = 'Aliases'
    Expression = {$PSitem.Aliases}
} | Where-Object -Property Aliases -EQ $null

# Results

Name       Aliases
----       -------
Path              
Filter            
Include           
Exclude           
Depth             
Force             
Name              
Attributes  

相关内容