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