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

时间:2017-02-23 18:03:11

标签: powershell logging office365 audit

正如您可能从标题中理解的那样,我是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而不是多个"对象集"。如果我删除ConvertFrom-Json,则ResultSize无效。

所以问题是:

我可以遍历所有"对象集"并从json转换并在csv上逐行导出?导致这样的事情:

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

非常非常感谢教师的答案。非常感谢!

1 个答案:

答案 0 :(得分:1)

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

这样只会将AuditData属性转发到ConvertFrom-Json并忽略Search-UnifiedAuditLog

中对象的其余部分