PowerShell:ConvertFrom-Json 将多个 objects 导出到 csv
PowerShell: ConvertFrom-Json to export multiple objects to csv
您可能从标题中了解到,我是 PowerShell 的新手,甚至很难描述我的问题。所以请原谅我的术语。
场景
我正在使用PowerShell查询Office 365的审核日志。cmdlet Search-UnifiedAuditLog
returns "multiple sets of objects"(?),其中一个数组有other objects(?)。如果我做对了,输出是 JSON。
这是一个返回的例子(我称之为一个"Set of Objects"):
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(通常包含比此处复制的数据多得多的数据)。这适用于 "set of objects"(如上面的那个)。为此,我使用:
$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
returns 1 而不是多个 "sets of objects"。如果删除 ResultSize
.
,ConvertFrom-Json
将不起作用
所以问题是:
我可以遍历 all 和 "set of objects" 并从 json 转换并在 csv 上导出 line-by-line 吗?结果是这样的:
UserId,Activity,UserIP
this@user.com, loggedIn, 10.10.10.10
that@user.org, accessedFile, 11.11.11.11
非常非常感谢您的教学回答。非常感谢!
尝试使用 Search-UnifiedAuditLog <args> | Select-Object -ExpandProperty AuditData | ConvertFrom-Json
而不是 -ResultSize
这只会使 AuditData
属性 转发到 ConvertFrom-Json
并忽略来自 Search-UnifiedAuditLog
的对象的其余部分
您可能从标题中了解到,我是 PowerShell 的新手,甚至很难描述我的问题。所以请原谅我的术语。
场景
我正在使用PowerShell查询Office 365的审核日志。cmdlet Search-UnifiedAuditLog
returns "multiple sets of objects"(?),其中一个数组有other objects(?)。如果我做对了,输出是 JSON。
这是一个返回的例子(我称之为一个"Set of Objects"):
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(通常包含比此处复制的数据多得多的数据)。这适用于 "set of objects"(如上面的那个)。为此,我使用:
$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
returns 1 而不是多个 "sets of objects"。如果删除 ResultSize
.
ConvertFrom-Json
将不起作用
所以问题是:
我可以遍历 all 和 "set of objects" 并从 json 转换并在 csv 上导出 line-by-line 吗?结果是这样的:
UserId,Activity,UserIP
this@user.com, loggedIn, 10.10.10.10
that@user.org, accessedFile, 11.11.11.11
非常非常感谢您的教学回答。非常感谢!
尝试使用 Search-UnifiedAuditLog <args> | Select-Object -ExpandProperty AuditData | ConvertFrom-Json
-ResultSize
这只会使 AuditData
属性 转发到 ConvertFrom-Json
并忽略来自 Search-UnifiedAuditLog