$userlist = "C:\userlist.txt"
Get-Content $userlist | %{Get-ADUser -Filter {name -eq $_}} | select -ExpandProperty samaccountname
$file = 'C:\userlist.txt'
#Remove whitespaces
#The first parameter to -replace is a regular expression pattern to match, and the second parameter is the text that will replace any matches. \s will match a whitespace character, and + indicates to match one or more occurrences, so, in other words, one or more adjacent whitespace characters will be replaced with a single space. Enter help about_comparison_operators or see here for more information.
$users = (Get-Content $file) | ForEach-Object { $PSItem -replace '\s+', ' ' }
#option familyname first or firstname first
foreach ($user in $users) {
$firstname = $user.split(' ')[0]
$familyname = $user.split(' ')[1] #PROBLEM HERE IS THAT USER SOMETIMES EXISTS OF 2, 3 OR MORE NAMES f.e. Erica Van Den Bossche, John Wrest Chesterburgh
#if familynamenamefirst $name = "$familyname $firstname" else $name = "$firstname $familyname"
Get-ADUser -Filter {displayname -like "$familyname $firstname"} | select -ExpandProperty samaccountname
}
#option familyname first or firstname first
$result = @()
foreach ($user in $users)
{
$firstname = $user.split(' ')[0]
$familyname = $user.split(' ')
$namecount = $familyname.count - 1
$familyname = $familyname[1..$namecount]
#if familynamenamefirst $name = "$familyname $firstname" else $name = "$firstname $familyname"
$UserDisplayNameToLookFor = "$familyname $firstname"
$samaccountame = Get-ADUser -Filter {
displayname -like $UserDisplayNameToLookFor
} | Select-Object -ExpandProperty samaccountname
$result += [pscustomobject]@{
FirstName = $firstname
FamilyName = $familyname
SamAccountame = $samaccountame
}
}
#option familyname first or firstname first
$result = @()
foreach ($user in $users)
{
$firstname = $user.split(' ')[0]
$familyname = $user.split(' ')
$namecount = $familyname.count - 1
$familyname = $familyname[1..$namecount]
#if familynamenamefirst $name = "$familyname $firstname" else $name = "$firstname $familyname"
$UserDisplayNameToLookFor = "*$familyname $firstname*"
$samaccountame = Get-ADUser -Filter {
displayname -like $UserDisplayNameToLookFor
} | Select-Object -ExpandProperty samaccountname
$result += [pscustomobject]@{
FirstName = $firstname
FamilyName = $familyname
SamAccountame = $samaccountame
}
}
Wildcard against the given name and surname:#option familyname first or firstname first
$result = @()
foreach ($user in $users)
{
$firstname = $user.split(' ')[0]
$gnfilter = "*" + $firstname + "*"
$familyname = $user.split(' ')
$namecount = $familyname.count - 1
$familyname = $familyname[1..$namecount]
#if familynamenamefirst $name = "$familyname $firstname" else $name = "$firstname $familyname"
$snfilter = "*$familyname*"
$samaccountame = Get-ADUser -Filter {
givenname -like $gnfilter -and surname -like $snfilter
} | Select-Object -ExpandProperty samaccountname
$result += [pscustomobject]@{
FirstName = $firstname
FamilyName = $familyname
SamAccountame = $samaccountame
}
}
$samaccountame = Get-ADUser -Filter {
givenname -like $firstname -and surname -like $familyname
} | Select-Object -ExpandProperty samaccountname
$samaccountame = Get-ADUser -Filter {
givenname -like $firstname -and surname -like $familyname
} | Select-Object -ExpandProperty samaccountname
Do you have any questions on what this is doing? $result = @()
foreach ($user in $users)
{
$firstname = $user.split(' ')[0]
$gnfilter = "*" + $firstname + "*"
$familyname = $user.split(' ')
$namecount = $familyname.count - 1
$familyname = $familyname[1..$namecount]
#if familynamenamefirst $name = "$familyname $firstname" else $name = "$firstname $familyname"
$snfilter = "*$familyname*"
$samaccountame = Get-ADUser -Filter {
givenname -like $gnfilter -and surname -like $snfilter
} | Select-Object -ExpandProperty samaccountname
$result += [pscustomobject]@{
FirstName = $firstname
FamilyName = $familyname
SamAccountame = $samaccountame
}
}
$users = Get-Content 'C:\userstoadd.txt'
$users
#remove whitespaces in front and at then end, then also make sure there is
#only one whitespace between family name and firstname (family name is also sometimes more then one or even two words)
#then need to get $lastname and $firstname of each of the users and it should not stop when it does not find the user
#maybe even suggest a name in case it doesn't find the user (spelled differently) but that's a next level wish :-)
Get-ADUser -Filter "Name -like '*$lastname*'" -Properties * | Where {($_.Surname -eq $lastname) -and (($_.GivenName -eq $firstName) -or ($_.DisplayName -like "*$firstname*")) } | Select samAccountName