如何将KQL查询结果行聚合为列表(Defender设备用户场景)
合并同一设备的用户记录解决方案
可以通过make_list()或make_set()函数结合summarize运算符实现需求,前者保留重复用户(如果存在),后者自动去重。修改后的KQL查询如下:
// 调用设备信息表 DeviceInfo // 通过正则筛选目标设备 | where DeviceName matches regex "md\\d{6}" // 筛选30天内更新的记录 | where Timestamp > ago(30d) // 处理用户名大小写问题并过滤空用户列表 | distinct DeviceName, a = tolower(tostring(LoggedOnUsers)) | where a != "[]" // 按设备名分组,合并用户列表 | summarize UserList = make_list(a) by DeviceName // 可选:将列表格式化为更易读的字符串 | extend UserListStr = strcat("[", strcat_array(UserList, ","), "]")
关键说明
summarize ... by DeviceName:按设备名称分组,将同一设备的所有用户记录聚合到一起。make_list(a):将分组后的用户值收集为数组;如果需要去重,替换为make_set(a)即可。- 最后一行的
extend是可选操作,用于把数组转换为类似[user1,user2,user3]的字符串格式,若直接使用数组格式可省略该行。
原查询缺少分组聚合步骤,导致同一设备的用户分散为多条记录,添加summarize配合聚合函数即可实现合并。
内容的提问来源于stack exchange,提问作者greaman
相关产品推荐
相关产品推荐

