如何在Microsoft 365 Defender的KQL中实现单列返回多值?
在KQL中让单个列返回多个值的方法
要在Microsoft 365 Defender的KQL查询里让单个列包含多个值,核心是使用聚合函数将多行的目标字段合并为列表类型。针对你从EmailAttachmentInfo架构中提取多个文件名的需求,这里提供两种常用实现方式:
1. 保留所有匹配的文件名(含重复)
使用make_list()函数,它会将符合条件的所有FileName值按顺序合并成一个列表,适合需要保留重复项的场景:
按邮件分组聚合(同一邮件的附件文件名归为一组)
EmailAttachmentInfo | where FileName matches regex "Interesting_File_\\d+\\.zip" | summarize AttachmentFileNames = make_list(FileName) by EmailMessageId
该查询会按邮件ID(EmailMessageId)分组,每个分组对应的AttachmentFileNames列会包含该邮件所有匹配的附件文件名列表。
聚合所有匹配的文件名(不分组)
如果不需要按邮件分组,直接将所有符合条件的文件名合并到单个单元格:
EmailAttachmentInfo | where FileName matches regex "Interesting_File_\\d+\\.zip" | summarize AllMatchingFileNames = make_list(FileName)
2. 仅保留唯一的文件名(去重)
如果需要去除重复的文件名,使用make_set()函数,它会自动去重后生成列表:
EmailAttachmentInfo | where FileName matches regex "Interesting_File_\\d+\\.zip" | summarize UniqueAttachmentFileNames = make_set(FileName) by EmailMessageId
补充说明
- 列表类型的值在Microsoft 365 Defender门户中会以逗号分隔的形式展示,你可以点击展开查看完整内容。
- 如果需要自定义列表的排序或限制数量,可以使用
make_list_with_sort()或make_list_limit()等进阶函数,例如:EmailAttachmentInfo | where FileName matches regex "Interesting_File_\\d+\\.zip" | summarize SortedFileNames = make_list_with_sort(FileName, FileName, asc) by EmailMessageId
内容的提问来源于stack exchange,提问作者Ken
相关产品推荐
相关产品推荐

