我当前的 PSCustomObject
第 3 行和第 4 行有多个项目 ID,需要将其拆分为各自的行,但要复制发票、拍卖和日期属性以进行匹配。
预期输出:
经过大量研究,我尝试了多种方法,但我却迷失了逻辑。我可以按属性名称进行选择并拆分每个属性,但在新行部分遇到问题。
我的对象代码:
$data = foreach ($foo in $AllMatches)
{
[PSCustomObject]@{
'Invoice' = ($data.Groups.Where{$_.Name -like 'Invoice'}).Value
'Auction' = ($data.Groups.Where{$_.Name -like 'Auction'}).Value
'Items' = ($data.Groups.Where{$_.Name -like 'Items'}).Value
'Date' = ($data.Groups.Where{$_.Name -like 'Date'}).Value
}
}
最佳答案
您的代码有点不清楚,但如果您已经有一个 PsObject 数组并且需要在某个属性上进行拆分,那么这是一种方法。
对于演示,我使用您的示例数据作为 Here-String 并将其从 CSV 转换:
$dataToSplit = @"
Invoice Auction Item ID Date
18585208 X8C3E5651 K5W6L07795 Feb 18, 2021
99457377 U9V7E3466 J2X1D40777 Feb 14, 2022
91833688 D2A7O0545 T7Z6Y74627,H3B4U81837 Feb 23, 2021
76058226 K3N0T6688 G1D0B37486,Q3B8Z87471 Aug 21, 2021
65314754 C1C1F6626 Q8D2J82095 Dec 9, 2021
"@ | ConvertFrom-Csv -Delimiter "`t"
$data = foreach ($item in $dataToSplit) {
$item.'Item ID' -split ',' | ForEach-Object {
[PSCustomObject]@{
'Invoice' = $item.Invoice
'Auction' = $item.Auction
'Item ID' = $_
'Date' = $item.Date
}
}
}
$data
输出:
Invoice Auction Item ID Date
------- ------- ------- ----
18585208 X8C3E5651 K5W6L07795 Feb 18, 2021
99457377 U9V7E3466 J2X1D40777 Feb 14, 2022
91833688 D2A7O0545 T7Z6Y74627 Feb 23, 2021
91833688 D2A7O0545 H3B4U81837 Feb 23, 2021
76058226 K3N0T6688 G1D0B37486 Aug 21, 2021
76058226 K3N0T6688 Q3B8Z87471 Aug 21, 2021
65314754 C1C1F6626 Q8D2J82095 Dec 9, 2021
关于如果属性有多个值,同时复制其他值,则 Powershell 拆分 PSCustomObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71111529/