Get-ADUser-计算具有相同姓氏和电子邮件(不包括数字)的用户

时间:2018-07-10 14:10:05

标签: regex powershell

我想计算具有相同姓氏和电子邮件的用户帐户。问题在于表示那些属性的字符串可以包含数字。 在AD中可以存在,例如,

  1. Anne Smith,anne.smith @ mail.pl
  2. 安妮·史密斯23,anne.smith23 @ mail.pl
  3. Anne Smithy,anne.smithy @ mail.pl。

数字仅用于使帐户和邮件地址唯一。 搜索Anne Smith将列出第一和第二位置。

现在我有一段代码可以做到这一点。

$Inni = Get-ADUser -Filter "(sn -like '$($UserWzor.Surname)*') -and (GivenName -eq '$($UserWzor.GivenName)')" -Server $DC -Properties sAMAccountName, sn, givenName, displayName, mail | Where-Object -FilterScript { $_.sAMAccountName -ne $UserAD.sAMAccountName } | Select-Object -Property sAMAccountName, sn, givenName, displayName, mail
$IluInnych1 = 0
$IluInnych2 = 0
foreach ($Inny in $Inni)        {
    $InnyNazwisko = $Inny.sn -replace '[ ]\d+$'
    $InnyImie = $Inny.GivenName
    if (($InnyNazwisko -eq $UserWzor.Surname) -and ($InnyImie -eq $UserWzor.GivenName)) { $IluInnych1++ }
    $InnyMail = [regex]::replace(($Inny.mail).Split("@")[0], '\d+$', "")
    if ($InnyMail -eq $NowyMail){ $IluInnych2++ }
}

我不需要知道其他Anne Smith数据,而只需要知道它们的编号,因此我可以通过向其DisplayName和mail属性添加下一个未占用的编号来重命名帐户。

由于-Filter选项不允许使用正则表达式,因此我尝试将其放入查询的Where-Object部分,甚至在ForEach-Object和{之间循环Get-AdUser {1}},但没有成功。

Where-Object

此查询的结果为空。

是否有可能比显示的方法更简单?

1 个答案:

答案 0 :(得分:0)

您可以使用以下正则表达式:

[\w]*? ([\w]*).*?, ([\w\d@.]*)

对于第1组和第2组相同的人,需要入围。

演示:https://regex101.com/r/RiOCf5/1

测试:

Anne Smith, anne.smith@mail.pl
Anne Smith 23, anne.smith23@mail.pl
Anne Smithy, anne.smithy@mail.pl

匹配:

Match 1
Group 1.    5-10    `Smith`
Group 2.    12-30   `anne.smith@mail.pl`

Match 2
Group 1.    36-41   `Smith`
Group 2.    46-66   `anne.smith23@mail.pl`

Match 3
Group 1.    72-78   `Smithy`
Group 2.    80-99   `anne.smithy@mail.pl`

Powershell中的结果:

[regex]::Match('Anne Smith, anne.smith@mail.pl','[\w]*? ([\w]*).*?, ([\w\d@.]*)').captures.groups[1].value
[regex]::Match('Anne Smith 23, anne.smith23@mail.pl','[\w]*? ([\w]*).*?, ([\w\d@.]*)').captures.groups[1].value
[regex]::Match('Anne Smithy, anne.smithy@mail.pl','[\w]*? ([\w]*).*?, ([\w\d@.]*)').captures.groups[1].value

输出:

Smith
Smith
Smithy