gpt4 book ai didi

regex - Powershell正则表达式匹配第一次出现字符串后的所有内容

转载 作者:行者123 更新时间:2023-12-02 23:53:23 25 4
gpt4 key购买 nike

所以我在 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=Test,OU=Test,OU=Test,OU=Test,DC=Test,DC=Test



我试过使用正则表达式,但我不知道如何只匹配 ,OU= 的第一次出现并保留它之后的所有内容。
我已经设法做到了,但它一直在删除 OU,因此我需要在所有 DistinguishedNames 前面添加一个“OU =”字符串,但这不能在没有循环的情况下完成,而且我无法创建选择对象内的循环
我还尝试在 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)

关于regex - Powershell正则表达式匹配第一次出现字符串后的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52297183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com