Thanks very much for your help, fellows, I really appreciate it. I have been refining the REGEX, I am glad to show it to you because it works so well… But I cannot take credit for it.
And right now, this seems to be line I will use in my real script:
$MatchingUsers = Get-AdUser -Filter "(Surname -like '$User*')" | Where-Object {$_.SurName -Match "^$([regex]::Escape($InputUser))(?:\d{1,2}.*)?$"} | Select-Object SamAccountName, GivenName, SurName, Name
And here is the way I tested and developed the REGEX:
# Set the value of $InputUser (change it as needed)
$InputUser = "Smit"
# Sample data for SurName (you can replace this with your actual data)
$Users = @(
[PSCustomObject]@{ SurName = "Smit" },
[PSCustomObject]@{ SurName = "Smit1" },
[PSCustomObject]@{ SurName = "Smit11" },
[PSCustomObject]@{ SurName = "Smit99" },
[PSCustomObject]@{ SurName = "Smit0" },
[PSCustomObject]@{ SurName = "Smith1" },
[PSCustomObject]@{ SurName = "Smith11" },
[PSCustomObject]@{ SurName = "Smit1" },
[PSCustomObject]@{ SurName = "Smit11abcdefg" },
[PSCustomObject]@{ SurName = "Smit99999999" },
[PSCustomObject]@{ SurName = "Smit99999999AAAAA" },
[PSCustomObject]@{ SurName = "Smit9A999999AAAAA" },
[PSCustomObject]@{ SurName = "SmitA9999999AAAAA" },
[PSCustomObject]@{ SurName = "Smit0" },
[PSCustomObject]@{ SurName = "Smith1" },
[PSCustomObject]@{ SurName = "Smith11" },
[PSCustomObject]@{ SurName = "Smith19" },
[PSCustomObject]@{ SurName = "Smith00" },
[PSCustomObject]@{ SurName = "Smith99" },
[PSCustomObject]@{ SurName = "Smith1" },
[PSCustomObject]@{ SurName = "Smith1" },
[PSCustomObject]@{ SurName = "Jone" },
[PSCustomObject]@{ SurName = "Brown" },
[PSCustomObject]@{ SurName = "Wils" }
[PSCustomObject]@{ SurName = "Smit" },
[PSCustomObject]@{ SurName = "Smith" },
[PSCustomObject]@{ SurName = "Jone" },
[PSCustomObject]@{ SurName = "Brown" },
[PSCustomObject]@{ SurName = "Wils" }
)
# Filter users based on the condition
$FilteredUsers = $Users | Where-Object { $_.SurName -like $InputUser -or $_.SurName -match "^$([regex]::Escape($InputUser))(?:\d{1,2}.*)?$" }
#$MatchingUsers = Get-AdUser -Filter "(Surname -like '$User*')" | Where-Object {$_.SurName -Match '[0-9][0-9]*'} | Select-Object SamAccountName, GivenName, SurName, Name
# Display the filtered users
$FilteredUsers
With this result:
PS C:\WINDOWS\system32> C:\Powershell\Demo Names and Numbers xx.ps1
SurName
-------
Smit
Smit1
Smit11
Smit99
Smit0
Smit1
Smit11abcdefg
Smit99999999
Smit99999999AAAAA
Smit9A999999AAAAA
Smit0
Smit
PS C:\WINDOWS\system32>