我想要一个规范名称的数据集,并投影出用户名和域名。我有一个工作的例子,但我发现它只有在CN和DC大写时才有效。
| parse MemberName with "CN=" TargetUser "," * ",DC=" TargetDomain
| extend TargetDomain = replace_string(TargetDomain, ",DC=", ".")
但是,一旦CN或DC没有大写,则预期的列为空。所以我试图用来解决这个问题
| parse-where kind=regex flags=i MemberName with
但无法让抓捕小组工作。cn=(.*?),
返回了整个字符串,我没有取得多大进展。
数据集
<Data Name="MemberName">CN=test one,OU=-Level11,OU=Level12,OU=Level13,DC=Locale1,DC=boing,DC=com</Data>
<Data Name="MemberName">cn=test two,OU=Level21,OU=Leve22,DC=Locale2,DC=com</Data>
<Data Name="MemberName">cn=test three,OU=Level31,OU=Level32,dc=Locale3,dc=Locale31,dc=Locale32,dc=com</Data>
预期输出
TargetUser | TargetDomain |
---|---|
测试一个 | Locale1.boing.com |
测试两个 | Locale2.com |
测试三个 | Locale31.Locale32.com |
您可以尝试使用RE2标志(特别是:i
=case insensitive
(:
datatable(input:string)
[
'<Data Name="MemberName">CN=test one,OU=Level11,OU=Level12,OU=Level13,DC=Locale1,DC=boing,DC=com</Data>',
'<Data Name="MemberName">cn=test two,OU=Level21,OU=Leve22,DC=Locale2,DC=com</Data>',
'<Data Name="MemberName">cn=test three,OU=Level31,OU=Level32,dc=Locale3,dc=Locale31,dc=Locale32,dc=com</Data>',
]
| parse kind=regex flags=Ui input with * "CN=" TargetUser "(,OU=[^,]+)*,DC=" TargetDomain "</Data>"
| project TargetUser, TargetDomain = replace_regex(TargetDomain, "(?i),dc=", ".")
TargetUser | TargetDomain |
---|---|
测试一个 | Locale1.boing.com |
测试两个 | Locale2.com |
测试三个 | Locale3.Locate31.Locale32.com |
以下任何一项都可以完成任务:
| parse kind=regex flags=iU MemberName with * ">CN=" CN ",OU=" OU ",DC=" DC "<"
| parse kind=regex flags=iU MemberName with * ">CN=" CN ",OU=.*" ",DC=" DC "<"
| parse kind=regex flags=iU MemberName with * ">CN=" CN ",.*" ",DC=" DC "<"
i
=不区分大小写U
=无自由
如果你一个接一个地检查它们,你会发现它实际上是非常直观的
Fiddle