Jordan Smith
asked on
PowerShell New-AddUser
Hey there,
I'm trying to add bulk users into Active Directory but for some reason it just won't take... The code is embedded here that I'm trying to run.
The error I get is:
PS C:\Users\Administrator.Dom ainName> C:\Scripts\Test.ps1
New-ADUser : A positional parameter cannot be found that accepts argument '.'.
At C:\Scripts\Test.ps1:4 char:1
+ New-ADUser -Name $_.Name `
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [New-ADUser], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFoun d,Microsof t.ActiveDi rectory.Ma nagemen
t.Commands.NewADUser
I don't really understand why its giving me this error as the -Name parameter is valid i thought... I got the template for this code at
http://www.morgantechspace.com/2014/04/Create-Bulk-AD-Users-from-CSV-using-Powershell-Script.html
and it seems to work for others. I tried putting in "-Name $_.Name `" and it gives the exact same error. I have attached the CSV file I'm referencing. It seems to have issues with the other ones that look like "-Name $_.Name `" if i remove the -Name attribute... It also doesn't enable the account even though the -Enable $_."Enable" ` is in there...
I have a huge list of people to add, The CSV is the same only this one doesn't have all the users in it. I can successfully add bulk users using my CSVs if i do this command in the PS window:
Import-Csv .|Test.csv | New ADUser
The problem I ran into there is AD wants the passwords as a secure string. I can add the attribute after the code above:
-AccountPassword (ConvertTo-SecureString "Test12344" -AsPlainText -Force)
And it works but I want the password from the CSV file. I know i could just add an attribute to make the user change the password but I want to be able to use the passwords from the CSV. That is why I want to use the Code that is attached.
Please excuse if some of my terms are wrong here as I am new to PS.
Testexample.csv
I'm trying to add bulk users into Active Directory but for some reason it just won't take... The code is embedded here that I'm trying to run.
Import-Module ActiveDirectory
Import-Csv "C:\Scripts\test.csv" | ForEach-Object {
$userPrincinpal = $_."samAccountName" + "@domainname.Local"
New-ADUser -Name $_.Name `
-Path $_."Path" `
-SamAccountName $_."SamAccountName" `
-UserPrincipalName $userPrincinpal `
-Surname $_. "Surname" `
-Discription $_. "Discription" `
-GivenName $_."GivenName" `
-AccountPassword (ConvertTo-SecureString $_."AccountPassword" -AsPlainText -Force) `
-ChangePasswordAtLogon $True `
-Enabled $true
}
The error I get is:
PS C:\Users\Administrator.Dom
New-ADUser : A positional parameter cannot be found that accepts argument '.'.
At C:\Scripts\Test.ps1:4 char:1
+ New-ADUser -Name $_.Name `
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [New-ADUser], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFoun
t.Commands.NewADUser
I don't really understand why its giving me this error as the -Name parameter is valid i thought... I got the template for this code at
http://www.morgantechspace.com/2014/04/Create-Bulk-AD-Users-from-CSV-using-Powershell-Script.html
and it seems to work for others. I tried putting in "-Name $_.Name `" and it gives the exact same error. I have attached the CSV file I'm referencing. It seems to have issues with the other ones that look like "-Name $_.Name `" if i remove the -Name attribute... It also doesn't enable the account even though the -Enable $_."Enable" ` is in there...
I have a huge list of people to add, The CSV is the same only this one doesn't have all the users in it. I can successfully add bulk users using my CSVs if i do this command in the PS window:
Import-Csv .|Test.csv | New ADUser
The problem I ran into there is AD wants the passwords as a secure string. I can add the attribute after the code above:
-AccountPassword (ConvertTo-SecureString "Test12344" -AsPlainText -Force)
And it works but I want the password from the CSV file. I know i could just add an attribute to make the user change the password but I want to be able to use the passwords from the CSV. That is why I want to use the Code that is attached.
Please excuse if some of my terms are wrong here as I am new to PS.
Testexample.csv
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
@MichaelIanClaridge - It's just the difference between using the foreach statement vs. the ForEach-Object cmdlet.
@footech - Absolutely, I have just never used that method before to create AD Objects :)
The thing I love about PowerShell is that there is more than 1 way to achieve the same thing.
All the best.
Michael
The thing I love about PowerShell is that there is more than 1 way to achieve the same thing.
All the best.
Michael
I agree. :)
ASKER
Thanks @MichaelIanClaridge! I ended up changing the script to your suggestion and it works great. This way is much simpler that the other way I was doing it... Thanks for the help!
I'm curious why you would think it's simpler? About the only difference is that you're using $User instead of $_ for all the parameters.
Though to be honest, when I was first starting out in PowerShell I did find using the foreach statement easier to understand than the ForEach-Object cmdlet, I think mainly because I hadn't fully grasped the concept of the pipeline yet.
Though to be honest, when I was first starting out in PowerShell I did find using the foreach statement easier to understand than the ForEach-Object cmdlet, I think mainly because I hadn't fully grasped the concept of the pipeline yet.
Open in new window
The error is detected in the New-ADUser command, but doesn't get specific enough about where in the command.