如果属性有多个值,同时复制其他值,则 Powershell 拆分 PSCustomObject

标签 powershell csv foreach split pscustomobject

我当前的 PSCustomObject

<表类=“s-表”> <标题> 发票 拍卖 项目 ID 日期 <正文> 18585208 X8C3E5651 K5W6L07795 2021 年 2 月 18 日 99457377 U9V7E3466 J2X1D40777 2022 年 2 月 14 日 91833688 D2A7O0545 T7Z6Y74627,H3B4U81837 2021 年 2 月 23 日 76058226 K3N0T6688 G1D0B37486,Q3B8Z87471 2021 年 8 月 21 日 65314754 C1C1F6626 Q8D2J82095 2021 年 12 月 9 日

第 3 行和第 4 行有多个项目 ID,需要将其拆分为各自的行,但要复制发票、拍卖和日期属性以进行匹配。

预期输出:

<表类=“s-表”> <标题> 发票 拍卖 项目 ID 日期 <正文> 18585208 X8C3E5651 K5W6L07795 2021 年 2 月 18 日 99457377 U9V7E3466 J2X1D40777 2022 年 2 月 14 日 91833688 D2A7O0545 T7Z6Y74627 2021 年 2 月 23 日 91833688 D2A7O0545 H3B4U81837 2021 年 2 月 23 日 76058226 K3N0T6688 G1D0B37486 2021 年 8 月 21 日 76058226 K3N0T6688 Q3B8Z87471 2021 年 8 月 21 日 65314754 C1C1F6626 Q8D2J82095 2021 年 12 月 9 日

经过大量研究,我尝试了多种方法,但我却迷失了逻辑。我可以按属性名称进行选择并拆分每个属性,但在新行部分遇到问题。

我的对象代码:

$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/

相关文章:

python - 如何在 Python 中删除 CSV 文件

javascript - JavaScript 中的 Razor foreach 循环

PowerShell 输出文件 : prevent encoding changes

powershell - 适用于com plus应用程序的Powershell更新

azure - 如何从 .NET 更新基于 Azure 应用程序网关路径的规则 UrlPathMap

java - ForEach 和 Facelets

azure - Terraform 无法将 target_id 与 for_each 循环一起使用

powershell - 如何使用 PowerShell 在 Azure Function 中加载文件

python - 在 python 中返回跨列具有重复对的行

c# - 保存大量外汇金融报价数据的最佳方式