regex - Powershell正则表达式匹配第一次出现字符串后的所有内容
问题描述
所以我在 Powershell 中有一个脚本,该脚本从 AD 下载用户列表,然后将其导出到 CSV 文件。代码如下:
$AllADUsers | Select-Object @{Label = "First Name";Expression = {$_.GivenName}},
@{Label = "Last Name";Expression = {$_.Surname}},
@{Label = "Password Last Set";Expression = {"Password last set: "+$_.passwordlastset}},
@{Label = "Expiration date";Expression = {"Expires on: "+[datetime]::fromfiletime($_.accountexpires[0])}},
@{Label = "OU";Expression = {$_.DistinguishedName}} |
Export-Csv -Path $csvfile -Encoding "UTF8" -NoTypeInformation
我需要在DistinguishedName中执行以下操作:
CN=Test,OU=Test,OU=Test,OU=Test,OU=Test,DC=Test,DC=Test
删除从 CN 到第一个逗号的所有内容并仅保留
OU=测试,OU=测试,OU=测试,OU=测试,DC=测试,DC=测试
我试过使用正则表达式,但我不知道如何只匹配第一次出现的,OU=并保留它之后的所有内容。我已经设法做到了,但它一直在删除 OU,因此我需要在所有 DistinguishedNames 前面添加一个“OU =”字符串,但这不能在没有循环的情况下完成,而且我无法创建Select-Object内的循环 我还尝试从 Select-Object 之前的 DistinguishedName 中删除所有文本,但随后我将无法使用 Select-Object 内的索引为当前用户提供正确的 DistinguishedName。
所以我需要一个正则表达式来保留第一个OU=之后的所有内容并保留这个OU=而不会删除它。
谢谢
解决方案
你可以用一个简单的正则表达式来做到这一点:
@($_.DistinguishedName -split '(?<!\\),',2)[1]
正则表达式模式可以分解为:
(?<! # negative lookbehind group
\\ # for a literal backslash \
) # end group
, # literal comma ,
包含lookbehind的原因是RDN包含逗号的DN将被拆分(想象CN=Doe\, John,OU=SomeOrgUnit,DC=domain,DC=tld
)
推荐阅读
- sql - 在 postgres 中查找两个整数数组之间的交集
- curl - 执行 CURL 时出现错误 500 内部服务器错误
- ffmpeg - libav MPEGTS 解复用 - 处理循环/不连续性
- r - Append() 不将更新的变量附加到 R 中的列表
- r - 在 R 中的 mlogit 中指定随机效应(有人可以与 lme4 进行比较吗?)
- java - 设置 Spring Native Experimental(在以下任何来源中均未找到 id 'org.springframework.experimental.aot' 版本 '0.10.3')
- java - 如何在不删除任何潜在重复项的情况下从字符串中删除参数?
- flutter - Flutter Moor 插入阵列
- python - 如何使用 Python 同时从服务器获取多个数据?
- xml - 在火花中读取 xml 文件时从 xml 属性中提取值