我目前正在努力使用 PowerShell 扩展嵌入 CSV 表某一特定列中的 JSON。我把问题总结如下,也许有人可以帮忙。
问题:
我编写了一个脚本,用于将日志文件从数据源导出到 CSV。 CSV 包含一组列。在某些情况下,我希望减少 CSV 的列数并扩展 CSV 中的任何嵌入 JSON,以便我可以对文件执行其他处理步骤。仅选择我可以使用的相关列:
$csvFile = Import-Csv -Path $filePath -Delimiter ","
$csvFileCompact = $csvFile | Select-Object -Property CreationDate, UserIds, Operations, AuditData
但是,列“AuditData”本身包含 JSON 格式的条目,我想扩展这些条目,然后将其作为新列添加到表中,导致表更改为“CreationDate、UserIDs、Operations、 AuditData_1、AuditData_2、...”,其中 AuditData_1、AuditData_2 等是扩展的 JSON 条目。
我尝试使用 ConvertFrom-JSON
并通过多种方式访问对象数据 ($obj | Select -ExpandProperty "SomeProp")
或 $obj."SomeProp"
将其应用于“AuditData”,但似乎在这里错过了一些东西。由于突然的“需求”,我昨天才开始使用 PowerShell,所以我有点时间压力,可能在这里错过了一些非常明显的东西。
编辑:添加一些示例数据只是为了提供一些额外的见解。将在几个小时内测试这些建议,但看起来已经非常有希望了!
以下 JSON 嵌入到链接的 CSV 中:
{"CreationTime":"2022-04-06T18:56:16","Id":"abc","Operation":"Update","OrganizationId":"abcd","RecordType":2,"ResultStatus":"Succeeded","UserKey":"1000000","UserType":0,"Version":1,"Workload":"Exchange","ClientIP":"2000:0000:000:000:abcd::d","UserId":"<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="dba9b4b9bea9af9bb8b4b6abbab5a2f5b8b4b6" rel="noreferrer noopener nofollow">[email protected]</a>","AppId":"abcde","ClientAppId":"abcdef","ClientIPAddress":"2000:0000:000:000:aaaa::d","ClientInfoString":"Client=REST;Client=RESTSystem;;","ClientRequestId":"abcd","ExternalAccess":false,"InternalLogonType":0,"LogonType":0,"LogonUserSid":"S-1","MailboxGuid":"abcdefg","MailboxOwnerSid":"S-2","MailboxOwnerUPN":"<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="88fae7eaedfafcc8ebe7e5f8e9e6f1a6ebe7e5" rel="noreferrer noopener nofollow">[email protected]</a>","OrganizationName":"company.onmicrosoft.com","OriginatingServer":"V (10.00.0000.000)\r\n","Item":{"Attachments":" (10000b)","Id":"0000","InternetMessageId":"<000000.eurprd09.prod.outlook.com>","IsRecord":false,"ParentFolder":{"Id":"000001234","Path":"\\Calendar\\Person"},"SizeInBytes":123456,"Subject":"Hi"},"ModifiedProperties":["AttachmentCollection","HtmlBody","CreationTime"]}
最佳答案
您可以使用Select-Object
calculated property为此(请参阅 Example 11: Create calculated properties for each InputObject ):
以表达式的形式:
$Object = $csvFile | Select-Object -Property CreationDate, UserIds, Operations,
{ $_.AuditData |ConvertFrom-Json }
或者以哈希表的形式:
$Object = $csvFile | Select-Object -Property CreationDate, UserIds, Operations,
@{ name = AuditData; Expression = { $_.AuditData |ConvertFrom-Json } }
从这里您可以进一步深入了解 json 对象属性,例如:
$Object.AuditData.SomeProp
您还可以考虑从 $Object
的 json(子)属性中创建一个新的计算属性:
$Object |Select-Object -Property CreationDate, UserIds, Operations, AuditData,
@{ name = SomeProp; Expression = { $_.AuditData.SomeProp } }
关于powershell - 使用 PowerShell 展开嵌入 CSV 列中的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72097638/