如何将 "Where-Object" 条件与“[PScustomobject]”一起使用?

How use "Where-Object" condition with '[PScustomobject]'?

我有一些代码:

$output = [PSCustomObject]@{
    Name       = $ws.UsedRange.Columns.Item(1).Value2
    Department = $ws.UsedRange.Columns.Item(3).Value2
}

$output | GM
TypeName: System.Management.Automation.PSCustomObject

Name        MemberType   Definition                                  
----        ----------   ----------                                  
Equals      Method       bool Equals(System.Object obj)              
GetHashCode Method       int GetHashCode()                           
GetType     Method       type GetType()                              
ToString    Method       string ToString()                           
Department  NoteProperty System.Object[,] Department=System.Object[,]
Name        NoteProperty System.Object[,] Name=System.Object[,]   

我需要对 $output 进行排序和过滤,但我做不到。什么都没发生。可能做错了什么。

PS> $output

Name                             Department                                     
----                             ----------                                    
{Numbers, 1,2,3,4,5,6,7...}      {Sales,IT,Accounting,Developers...}       

还有我的情况:

PS> $output | Sort-Object Department -Descending | Where-Object {$_.Department -eq "Sales"}

Name                             Department                                     
----                             ----------                                    
{Numbers, 1,2,3,4,5,6,7...}      {Sales,IT,Accounting,Developers...}   

您创建了一个具有 2 个属性的对象,每个属性都包含其关联列的所有 值。由于 Sort-ObjectWhere-Object 根据属性对对象列表进行排序和过滤,因此这些 cmdlet 在这里无事可做。

您真正想要做的是创建一个对象每行

$output = foreach ($row in $ws.UsedRange.Rows) {
    [PSCustomObject]@{
        Name       = $row.Columns.Item(1).Value2
        Department = $row.Columns.Item(3).Value2
    }
}

未经测试,因为我手边没有 MS Office。