对于以下 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 Aliases
为where 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