如何将 "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-Object
和 Where-Object
根据属性对对象列表进行排序和过滤,因此这些 cmdlet 在这里无事可做。
您真正想要做的是创建一个对象每行。
$output = foreach ($row in $ws.UsedRange.Rows) {
[PSCustomObject]@{
Name = $row.Columns.Item(1).Value2
Department = $row.Columns.Item(3).Value2
}
}
未经测试,因为我手边没有 MS Office。
我有一些代码:
$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-Object
和 Where-Object
根据属性对对象列表进行排序和过滤,因此这些 cmdlet 在这里无事可做。
您真正想要做的是创建一个对象每行。
$output = foreach ($row in $ws.UsedRange.Rows) {
[PSCustomObject]@{
Name = $row.Columns.Item(1).Value2
Department = $row.Columns.Item(3).Value2
}
}
未经测试,因为我手边没有 MS Office。