2017-02-23 67 views
0

正如您可能从标题中了解到的,我是PowerShell的新手,甚至很难描述我的问题。所以请原谅我的术语。PowerShell:ConvertFrom-Json将多个对象导出到csv

方案

我使用PowerShell来查询办公室365 Search-UnifiedAuditLog返回“多组对象的”(?),其中一个具有其他对象数组的cmdlet的审计日志(?) 。如果我有这个权利,输出是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 

现在,我想要一些导出到CSV中的AuditData线的内容(通常包含比这里复制的更多的数据)。这适用于一组“对象”(如上所述)。要做到这一点我使用:

$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,而不是多个“对象集”。如果我删除ResultSize,则ConvertFrom-Json不起作用。

所以,问题是:

我可以遍历所有“设置对象”,并从JSON转换,并有该行出口逐线对CSV?导致这样的事情:

UserId,Activity,UserIP 
[email protected], loggedIn, 10.10.10.10 
[email protected], accessedFile, 11.11.11.11 

教师的答案将非常,非常感激。非常感谢!

+0

而不是'-ResultSize'忽略对象的其余部分,请尝试使用'搜索 - UnifiedAuditLog | Select-Object -ExpandProperty AuditData | ConvertFrom-Json' – Eris

+0

@Eris你是**天才!**这正是我所需要的。现在有一个csv文件,包含所有审核的事件,包括所有的细节都包含在AuditData对象中。试图将您的评论标记为答案,但意识到我无法做到这一点。 – pontus

回答

1

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

这将使只有AuditData财产被转发到ConvertFrom-JsonSearch-UnifiedAuditLog