Powershell - 在 @{name 别名后使用 WHERE 子句不返回任何内容

Powershell - 在 @{name 别名后使用 WHERE 子句不返回任何内容

我不能在 @{name 别名之后在管道中使用 WHERE 吗?

我必须在输出中使用自定义列标题,因此我使用 @{name 语法。稍后在管道中,排序使用我为其指定的别名进行,但 WHERE 子句不工作。我尝试过返回原始 $_. 变量名,但它们似乎也不起作用。当我删除 WHERE 子句时,我得到了带有别名标题的输出。

示例:没有 @{Name 别名,但 WHERE 有效

PS C:\> Get-WmiObject Win32_operatingsystem | select version,BuildNUmber | where { $_.buildnumber -eq 3790} |  sort version

version                                                                                                BuildNUmber                                                                                           
-------                                                                                                -----------                                                                                           
5.2.3790                                                                                                   3790                 

带别名和 WHERE 的 EXAMPLE 不起作用

Get-WmiObject Win32_operatingsystem | select @{Name="Ver";Expression={$_.version}}, @{Name="Build";Expression={$_.BuildNUmber}} | where { "build" -eq 3790} |  sort "ver" 

EXAMPLE 带有别名且没有 WHERE,可获得输出。SORT 使用别名,同样有效。

PS C:\> Get-WmiObject Win32_operatingsystem | select @{Name="Ver";Expression={$_.version}}, @{Name="Build";Expression={$_.BuildNUmber}} |  sort "ver" 

Ver                                                                                                    Build                                                                                                 
---                                                                                                    -----                                                                                                 
5.2.3790                                                                                               3790                                                                                                  

所以理想情况下,我希望能够将@{name 与 WHERE 子句一起使用。

答案1

你有一个语法缺陷:

where { "build" -eq 3790} 

上述语句的功能与以下内容相同:

where { $false }

无论你用管道传送什么,它都不会返回任何内容。

将其更改为

where { $_.Build -eq 3790 }

相关内容