PowerShell:ConvertFrom-Json 将多个对象导出到 csv

Posted

技术标签:

【中文标题】PowerShell:ConvertFrom-Json 将多个对象导出到 csv【英文标题】:PowerShell: ConvertFrom-Json to export multiple objects to csv 【发布时间】:2017-07-14 08:44:11 【问题描述】:

您可能从标题中了解到,我是 PowerShell 新手,甚至很难描述我的问题。所以请原谅我的术语。

场景

我正在使用 PowerShell 查询 Office 365 的审核日志。cmdlet Search-UnifiedAuditLog 返回“多组对象”(?),其中一个对象包含一组其他对象(?)。如果我做对了,输出就是 JSON。

这是一个返回的示例(我将其称为一个“对象集”):

RunspaceId   : xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
RecordType   : AzureActiveDirectoryStsLogon
CreationDate : 21/02/2017 12:05:23
UserIds      : xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Operations   : UserLoggedIn
AuditData    : "CreationTime":"2017-02-21T12:05:23","Id":""ID":"00000000000000000","Type":3],"ActorContextId":"xxxxxxxxxxxxxxxxxxxxxxxxx","ActorIpAddress":"xxxxxxxxxxxxx","InterSystemsId":"xxxxxxxxxxxxxxxxx","IntraSystemId":"000000000000-000000-000","Target":["ID":"00-0000-0000-c000-000000000000","Type":0],"TargetContextId":"xxxxxxxxxxxxxxxxxx","ApplicationId":"xxxxxxxxxxxxxxxxxxxxxxxxxx"
ResultIndex  : 1
ResultCount  : 16
Identity     : xxxxxxxxxxxxxxxxxxxxxxxxxxx
IsValid      : True
ObjectState  : Unchanged

现在,我想要将AuditData 行的一些内容导出到 csv(通常包含比此处复制的数据多得多的数据)。这适用于一组“对象”(如上面的对象)。为此,我使用:

$LogOutput = Search-UnifiedAuditLog -StartDate 2/20/2017 -EndDate 2/23/2017 -ResultSize 1
$ConvertedOutput = ConvertFrom-Json -InputObject $LogOutput.AuditData
$ConvertedOutput | Select-Object CreationTime,UserId,ClientIP | Export-Csv -Path "C:\users\some.user\desktop\users.csv

ResultSize 返回 1 而不是多个“对象集”。如果我删除 ResultSizeConvertFrom-Json 将不起作用。

所以问题是:

我可以遍历所有“对象集”并从 json 转换并在 csv 上逐行导出吗?结果是这样的:

UserId,Activity,UserIP
this@user.com, loggedIn, 10.10.10.10
that@user.org, accessedFile, 11.11.11.11

非常非常感谢一个教学答案。非常感谢!

【问题讨论】:

-ResultSize代替Search-UnifiedAuditLog <args> | Select-Object -ExpandProperty AuditData | ConvertFrom-Json @Eris 你是一个天才!这正是我所需要的。现在有一个 csv 文件,其中包含所有审核的事件,包括烘焙到 AuditData 对象中的所有详细信息。试图将您的评论标记为答案,但意识到我不能这样做。 【参考方案1】:

请尝试使用Search-UnifiedAuditLog <args> | Select-Object -ExpandProperty AuditData | ConvertFrom-Json,而不是-ResultSize

这将仅将AuditData 属性转发到ConvertFrom-Json 并忽略来自Search-UnifiedAuditLog 的其余对象

【讨论】:

以上是关于PowerShell:ConvertFrom-Json 将多个对象导出到 csv的主要内容,如果未能解决你的问题,请参考以下文章

powershell PowerShell:启动PowerShell作为其他用户提升

powershell [提示输入powershell] #powershell #input #prompt

powershell 测量PowerShell命令或PowerShell脚本的速度

powershell远程下载exe并执行

powershell 使用啥端口

powershell PowerShell使用PowerShell创建本地管理员帐户