CLR Benjamin
asked on
Powershell ActiveDirectory Rename SamAcctName
Hello!
I work on a powershell script for my Active Directory.
My mission is simple: Search every samaccountname contains uppercase and export it to a CSV and then rename the samaccountname in lowercase.
And it work with that code for extract samaccountname in uppercase :
Why "-cmatch'^[a-z A-Z .]+$'"? Cause all of my samaccountname are written like that: x.XXxxx .
Next step, i try to rename in lowercase all the samaccountname in the list of username.csv contained in Active DIrectory.
And i'm blocked with that code :
It doesn't work.
Can you help me? Im a newbie.
The hardest point is after executing that script in powershell, i want to see the result in the AD.
For example: There is an oldSamAccountName: J.smiTH , after executing the script, im able to see in AD (not in the powershell console) the new Account name: j.smith in Properties->Account. Is it possible?
Thanks in advance.
I work on a powershell script for my Active Directory.
My mission is simple: Search every samaccountname contains uppercase and export it to a CSV and then rename the samaccountname in lowercase.
And it work with that code for extract samaccountname in uppercase :
Get-ADUser -filter * -Searchbase 'OU=users,DC=contoso,DC=com' | ? {$_.sAMAccountname -cmatch'^[a-z A-Z .]+$'} | Select Name | Export-csv -path C:\Users\me\username.csv -NoTypeInformation
Why "-cmatch'^[a-z A-Z .]+$'"? Cause all of my samaccountname are written like that: x.XXxxx .
Next step, i try to rename in lowercase all the samaccountname in the list of username.csv contained in Active DIrectory.
And i'm blocked with that code :
Import-Csv C:\Users\me\username.csv | foreach{Set-ADUser -identity $_-SamAccountName $_.sAMAccountName.tolower(.)}
It doesn't work.
Can you help me? Im a newbie.
The hardest point is after executing that script in powershell, i want to see the result in the AD.
For example: There is an oldSamAccountName: J.smiTH , after executing the script, im able to see in AD (not in the powershell console) the new Account name: j.smith in Properties->Account. Is it possible?
Thanks in advance.
ASKER
No, always the error :
In english: A positional parameter cannot be found that accepts argument "me".
I want to be more precise: I want import the samaccountname contained in the csv file, in powershell and for EACH name, apply the function Lowercase to the SamAccountName. And i want to see the result in the AD console when i right click-Properties-Account on the user.
Here my list in the CSV :
Set-ADUser : Impossible de trouver un paramètre positionnel acceptant l'argumen
t « me ».
Au niveau de ligne : 1 Caractère : 74
+ Import-Csv C:\Users\me\username.csv | foreach{Set-ADUser <<<
< -identity $_.SamAccountName $_.sAMAccountName.tolower()}
+ CategoryInfo : InvalidArgument: (:) [Set-ADUser], ParameterBind
ingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.ActiveDire
ctory.Management.Commands.SetADUser
Set-ADUser : Impossible de trouver un paramètre positionnel acceptant l'argumen
t « t.desk ».
Au niveau de ligne : 1 Caractère : 74
+ Import-Csv C:\Users\me\username.csv | foreach{Set-ADUser <<<
< -identity $_.SamAccountName $_.sAMAccountName.tolower()}
+ CategoryInfo : InvalidArgument: (:) [Set-ADUser], ParameterBind
ingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.ActiveDire
ctory.Management.Commands.SetADUser
In english: A positional parameter cannot be found that accepts argument "me".
I want to be more precise: I want import the samaccountname contained in the csv file, in powershell and for EACH name, apply the function Lowercase to the SamAccountName. And i want to see the result in the AD console when i right click-Properties-Account on the user.
Here my list in the CSV :
"sAMaccountname"
"t.DESK2"
"t.Desk"
First get rid of the " in your CSV file. I have done imports many times and never used quotes in my csv file.
Try this
Import-Csv C:\Users\me\username.csv | foreach {
$samid= $_.samaccountname
$samid=$samid.tolower()
Set-ADUser -identity $_.samaccoutname -samaccoutname $samid
}
Try this
Import-Csv C:\Users\me\username.csv | foreach {
$samid= $_.samaccountname
$samid=$samid.tolower()
Set-ADUser -identity $_.samaccoutname -samaccoutname $samid
}
ASKER
I tried, but i have this error now :
Translation : impossible to validate an argument on a parameter: identity.
Mhh now i have a doubt about the command: Set-ADUser -identity $_.samaccoutname -samaccoutname $samid.
PS: if i have the " in my csv it's because i opened it with the text editor. Or not? (on my server i can't read csv for the moment.)
Set-ADUser : Impossible de valider l'argument sur le paramètre « Identity ». L'
argument est null. Indiquez un argument non-null et réessayez.
Au niveau de C:\Users\me\dc.ps1 : 4 Caractère : 21
+ Set-ADUser -identity <<<< $_.samaccoutname -samaccoutname $samid
+ CategoryInfo : InvalidData: (:) [Set-ADUser], ParameterBindingV
alidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.Activ
eDirectory.Management.Commands.SetADUser
Set-ADUser : Impossible de valider l'argument sur le paramètre « Identity ». L'
argument est null. Indiquez un argument non-null et réessayez.
Au niveau de C:\Users\me\dc.ps1 : 4 Caractère : 21
+ Set-ADUser -identity <<<< $_.samaccoutname -samaccoutname $samid
+ CategoryInfo : InvalidData: (:) [Set-ADUser], ParameterBindingV
alidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.Activ
eDirectory.Management.Commands.SetADUser
Translation : impossible to validate an argument on a parameter: identity.
Mhh now i have a doubt about the command: Set-ADUser -identity $_.samaccoutname -samaccoutname $samid.
PS: if i have the " in my csv it's because i opened it with the text editor. Or not? (on my server i can't read csv for the moment.)
samaccoutname should be samaccountname. It is misspelled.
Import-Csv C:\Users\me\username.csv | foreach {
$samid = $($_.samaccountname).tolower()
Set-ADUser -identity $_.samaccountname -samaccountname $samid
}
Good catch. Sorry about that.
It happens to the best of us!
ASKER
OK really thank you, it's working... Or not i have not the result i looking for. With screenshot; As you can see the SAMACCOUNTNAME is in lowercase as i asked =).
But in AD:
Why it's always t-DESK?
Use another commande like Rename instead "-samaccountname"?
Thank you a lot btw now i understand few more things in powershell.
But in AD:
Why it's always t-DESK?
Use another commande like Rename instead "-samaccountname"?
Thank you a lot btw now i understand few more things in powershell.
How many DCs do you have? The info could be changed and may need time to replicate if you have multiple DCs.
Joseph has a point. Depending on your replication schedule it could take a bit.
ASKER
Only two DC. Are you sure this command change the parameter in AD? Cause i always suceed today to made the change in powershell and i got the same problem.
The replication took only 5-10 minutes. I can wait.
The replication took only 5-10 minutes. I can wait.
it may be because of the UserPrincipalName as well
ASKER
So i need to change the UPN too? What's the command -UserprincipalName?
-UserPrincipalName
Import-Csv C:\Users\me\username.csv | foreach {
$samid = $($_.samaccountname).tolow er()
Set-ADUser -identity $_.samaccountname -samaccountname $samid -UserPrincipalName "$($samid)@contoso.com"
}
Import-Csv C:\Users\me\username.csv | foreach {
$samid = $($_.samaccountname).tolow
Set-ADUser -identity $_.samaccountname -samaccountname $samid -UserPrincipalName "$($samid)@contoso.com"
}
ASKER
ASKER
Is this another command like SET-ADOBJECT?
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Wow nice, it work!! But, didn't understand your code yet. I will work on it. Just why $samid +"1" ? And the last line, what did it change in the script?
All it does is change the name to
t.desk1 then changes it back to t.desk.
It seems ADUC doesn't update if the case changes unless you completely rename it first
t.desk1 then changes it back to t.desk.
It seems ADUC doesn't update if the case changes unless you completely rename it first
ASKER
Ah i understand now, strange.
Thank you!
Thank you!
Open in new window
You have a - instead of a . listed in this code should be.
Open in new window