我尝试使用ADUser powershell cmdlet从csv文件导入用户,这里是脚本
Import-Module ActiveDirectory
$csvcontent = Import-CSV -Path "C:\Program Files (x86)\AWS Tools\PowerShell\AWSPowerShell\import_create_ad_users_2a.csv"
foreach ($user in $csvcontent) {
$samAccountName = $user.GivenName.substring(0,1).ToLower()+$user.LastName.ToLower()
$userPrincinpal = $samAccountName+"@mmc.local"
New-ADUser
-AccountPassword (ConvertTo-SecureString -AsPlainText $user.Password -force)`
-ChangePasswordAtLogon $false`
-Company “mmc LLP.”`
-DisplayName ($user.GivenName+""+$user.Lastname)`
-userprincipalname $userPrincinpal`
-SamAccountName $samAccountName` -Name ($user.GivenName+""+$user.Lastname)`
-Path “CN=Users,DC=mmc,DC=local”`
-state $user.County`
-givenname $user.GivenName`
-surname $user.Lastname`
-description ($user.Description)`
-Enabled $true`
Add-ADGroupMember "mmc_Users" $samAccountName;
}
但是当我在powershell中运行命令时,我得到如下所示的提示,我想导入csv文件中列出的所有用户而无需任何用户干预。
cmdlet New-ADUser at command pipeline position 1
Supply values for the following parameters:
Name:
请查看脚本并告诉我如何解决此问题。
仅供参考 - Powershell初学者
谢谢,
KARTHIK
答案 0 :(得分:2)
反引号通常值得避免。它们通过转义下一个字符来工作,该字符在一行的末尾是换行符,因此它允许命令继续。然而,它太容易在你看不到的反击之后留下一个空格,然后最终变得逃脱而不是换行符。上面的情况似乎并非如此,但正如TessellatingHeckler指出你在New-ADUser
之后错过了一个。
更好的解决方案(以防止代码过于横向)将使用splatting,如下所示:
Import-Module ActiveDirectory
$csvcontent = Import-CSV -Path "C:\Program Files (x86)\AWS Tools\PowerShell\AWSPowerShell\import_create_ad_users_2a.csv"
foreach ($user in $csvcontent) {
$samAccountName = $user.GivenName.substring(0,1).ToLower()+$user.LastName.ToLower()
$userPrincinpal = $samAccountName+"@mmc.local"
$NewUserParams = @{
AccountPassword = (ConvertTo-SecureString -AsPlainText $user.Password -Force)
ChangePasswordAtLogon = $false
Company = “mmc LLP.”
DisplayName = ($user.GivenName+""+$user.Lastname)
userprincipalname = $userPrincinpal
SamAccountName = $samAccountName
Name = ($user.GivenName+""+$user.Lastname)
Path = “CN=Users,DC=mmc,DC=local”
state = $user.County
givenname = $user.GivenName
surname = $user.Lastname
description = ($user.Description)
Enabled = $true
}
New-ADUser @NewUserParams
Add-ADGroupMember "mmc_Users" $samAccountName
}
这可以通过创建一个哈希表@{ }
,其中包含您要设置的每个参数,然后将该哈希表发送到具有特殊@
字符的cmdlet。
答案 1 :(得分:0)
我觉得很少看错了,但我们试着解决它。最好在创建用户后更改名称。这将限制脚本失败。 反引号可以用于正在学习如何编码的人,它允许您以更合理的方式查看代码。您也可以按照建议创建一个数组,但这可能会变得复杂并且无法给出正确的结果。
让我们分解下面的脚本。首先我们调用ActiveDirectory Module,然后调用CSV。那部分效果很好。
我们可以使用以下提供的代码对其进行测试:
Import-Module ActiveDirectory
$csvcontent = Import-CSV -Path "C:\Program Files (x86)\AWS Tools\PowerShell\AWSPowerShell\import_create_ad_users_2a.csv"
$csvcontent | Out-GridView
这应该显示原始数据,但一个例子是:
GivenName |姓氏|密码|说明|国家
Karthik | CSVScript | 79HKJ#p8 | UserTest |挪威
一旦我们确认列是正确的。我们可以运行脚本
使用Import-CSV时,它会导入您定义为pipline的列($ _。GivenName)。这允许我们不要创建另一个变量。从Import-CSV cmdlet调用它只会使用您在原始数据(CSV文件)中提供的字段。
您可以将以下内容另存为名为NewUser_CSV.ps1
的PS_Script下面的脚本只会查看您放入列中的内容。如果某些内容不正确,则表示CSV中的数据错误。这是使用CSV文件的基本添加AD用户,没有重大错误处理。
我们将使用Transcript cmdlet收集日志
#RUN AS ADMIN!
Start-Transcript -Path "C:\Program Files (x86)\AWS Tools\PowerShell\AWSPowerShell\import_create_ad_users_2a.log"
Import-Module ActiveDirectory
$csvcontent = Import-CSV -Path "C:\Program Files (x86)\AWS Tools\PowerShell\AWSPowerShell\import_create_ad_users_2a.csv"
$csvcontent | ForEach-Object {
$sam = $_.GivenName.substring(0,1)+$_.Lastname
$setpass = ConvertTo-SecureString -AsPlainText $_.Password -force
Try
{
New-ADUser $samAccountName `
-Path "CN=_s,DC=mmc,DC=local" `
-GivenName $_.GivenName `
-Surname $_.LastName `
-UserPrincipalName ($samAccountName + "@mmc.local")`
-DisplayName ($_.GivenName + " " + $_.LastName) `
-Description $_.Description `
-Enabled $TRUE `
-Company "mmc LLP." `
-State $_.Country `
-AccountPassword $setpass `
-ChangePasswordAtLogon $False `
-AccountPassword $setpass
$newdn = (Get-ADUser $samAccountName).DistinguishedName
Rename-ADObject -Identity $newdn -NewName ($_.GivenName + " " + $_.LastName)
}
Catch
{
Write-Host "[ERROR]`t Oops, something went wrong: $($_.Exception.Message)`r`n"
}
}
Stop-Transcript
我真的希望这可以帮助你完成任务并完成任务。学习PowerShell祝你好运。