Kusto KQL 引用 JSON 数组中的第一个对象
Kusto KQL reference first object in an JSON array
我需要在 Microsoft Defender ATP 中使用 Kusto KQL 获取 json 数组中第一个条目的值。
数据格式是这样的(匿名),我想要"UserName"的值:
[{"UserName":"xyz","DomainName":"xyz","Sid":"xyz"}]
如何拆分或以任何其他方式获得 "UserName" 值?
要访问第一个条目的 UserName
属性,您可以执行以下操作:
print d = dynamic([{"UserName":"xyz","DomainName":"xyz","Sid":"xyz"}])
| extend result = d[0].UserName
要获取 all 条目的 UserName
,您可以使用 mv-expand
/mv-apply
:
print d = dynamic([{"UserName":"xyz","DomainName":"xyz","Sid":"xyz"}])
| mv-apply d on (
project d.UserName
)
感谢您的回复,但建议的解决方案对我不起作用。但是我找到了以下解决方案:
project substring(split(split(LoggedOnUsers,',',0),'"',4),2,9)
这个输出是:用户名
在 WDATP/MSTAP 中,对于 "LoggedOnUsers" 类型的数组,您需要 "mv-expand" (多值展开)与 "parsejson".
结合使用
"parsejson"会将字符串变成JSON,mv-expand会把它展开成LoggedOnUsers.Username、LoggedOnUsers.DomainName和LoggedOnUsers.Sid:
DeviceInfo
| mv-expand parsejson(LoggedOnUsers)
| project DeviceName, LoggedOnUsers.UserName, LoggedOnUsers.DomainName
请记住,如果 packed 字段有多个条目(如 DeviceNetworkInfo 的 IPAddresses 字段经常如此),则整个行将针对每个条目扩展一次 - 因此 "IPAddresses" 中具有 3 个条目的机器的一行将被复制 3 次,每次 IpAddresses 的不同扩展:
DeviceNetworkInfo
| where Timestamp > ago(1h)
| mv-expand parsejson(IPAddresses)
| project DeviceName, IPAddresses.IPAddress
我需要在 Microsoft Defender ATP 中使用 Kusto KQL 获取 json 数组中第一个条目的值。
数据格式是这样的(匿名),我想要"UserName"的值:
[{"UserName":"xyz","DomainName":"xyz","Sid":"xyz"}]
如何拆分或以任何其他方式获得 "UserName" 值?
要访问第一个条目的 UserName
属性,您可以执行以下操作:
print d = dynamic([{"UserName":"xyz","DomainName":"xyz","Sid":"xyz"}])
| extend result = d[0].UserName
要获取 all 条目的 UserName
,您可以使用 mv-expand
/mv-apply
:
print d = dynamic([{"UserName":"xyz","DomainName":"xyz","Sid":"xyz"}])
| mv-apply d on (
project d.UserName
)
感谢您的回复,但建议的解决方案对我不起作用。但是我找到了以下解决方案:
project substring(split(split(LoggedOnUsers,',',0),'"',4),2,9)
这个输出是:用户名
在 WDATP/MSTAP 中,对于 "LoggedOnUsers" 类型的数组,您需要 "mv-expand" (多值展开)与 "parsejson".
结合使用"parsejson"会将字符串变成JSON,mv-expand会把它展开成LoggedOnUsers.Username、LoggedOnUsers.DomainName和LoggedOnUsers.Sid:
DeviceInfo
| mv-expand parsejson(LoggedOnUsers)
| project DeviceName, LoggedOnUsers.UserName, LoggedOnUsers.DomainName
请记住,如果 packed 字段有多个条目(如 DeviceNetworkInfo 的 IPAddresses 字段经常如此),则整个行将针对每个条目扩展一次 - 因此 "IPAddresses" 中具有 3 个条目的机器的一行将被复制 3 次,每次 IpAddresses 的不同扩展:
DeviceNetworkInfo
| where Timestamp > ago(1h)
| mv-expand parsejson(IPAddresses)
| project DeviceName, IPAddresses.IPAddress