Powershell调用-RestMethod-格式化.csv导出的响应

5ktev3wc  于 2022-12-15  发布在  Shell
关注(0)|答案(1)|浏览(126)

我正在编写一个脚本,使用Invoke-RestMethod从API中提取订单详细信息。我得到的响应是PS将json转换为PSCustomObject。我尝试做的是在.csv文件中生成行,其中嵌套数组对象在每行上拆分,非嵌套项在这些行上复制。例如,我们有订单标题和订单详细信息数据。订单明细可以包含多个产品。想象一下一个简单的SQL连接。
目前,我正在这样做,这是给我一个订单每行多个SKU在同一行。

$result = $OrdDetailResponse | Select-Object -Expand Orders |
Select-Object NumOrderID,ReferenceNum,SKU,
@{n='Order Id';e={$_.NumOrderID -join ','}},
@{n='Reference Number';e={$_.GeneralInfo.ReferenceNum -join ','}},
@{n='SKU';e={$_.Items.SKU -join ','}} -Exclude NumOrderID, ReferenceNum,SKU |
Export-Csv -Path "D:\Exports\Test\export.csv" -NOT

预期结果将是

我想我需要遍历响应中的每条记录,并扩展数组对象以将SKU拆分到每一行,但不确定如何有效地将OrderID和Reference Number复制到这些行。
任何帮助都不胜感激

50pmv0ei

50pmv0ei1#

你只需要在.Items.SKU属性上用逗号分隔,然后为每个枚举的SKU创建一个新对象。为了用逗号分隔,我使用了.Split Method。我还将Select-Object语句改为[pscustomobject],在我看来可读性更强。

$OrdDetailResponse.Orders | ForEach-Object {
    foreach($sku in $_.Items.SKU.Split(',')) {
        [pscustomobject]@{
            'Order Id' = $_.NumOrderID -join ','
            'Reference Number' = $_.GeneralInfo.ReferenceNum -join ','
            'SKU' = $sku
        }
    }
} | Export-Csv -Path "D:\Exports\Test\export.csv" -NOT

字符串

相关问题