使用Powershell从csv批量导入AD用户,无需用户干预



我正在尝试使用 ADUser powershell cmdlet 从 csv 文件导入用户,这是脚本

Import-Module ActiveDirectory
$csvcontent = Import-CSV -Path "C:Program Files (x86)AWS ToolsPowerShellAWSPowerShellimport_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初学者

谢谢

卡尔西克

反引号通常值得避免。它们通过转义下一个字符来工作,下一个字符在行尾是换行符,因此它允许命令继续。然而,在反引号之后很容易得到一个你看不到的空格,然后最终被转义而不是换行符。上面似乎不是这样,但正如TessellatingHeckler指出的那样,你错过了一个接New-ADUser

更好的解决方案(防止代码水平太远(是像这样使用拼接:

Import-Module ActiveDirectory
$csvcontent = Import-CSV -Path "C:Program Files (x86)AWS ToolsPowerShellAWSPowerShellimport_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。

我认为有几件事看起来不对,但让我们尝试修复它。更改名称最好在创建用户后完成。这将限制脚本失败。 反引号可用于刚刚学习如何编码的人,它允许您以更合乎逻辑的方式查看代码。您也可以按照建议创建一个数组,但这可能会变得复杂并且无法给出正确的结果。

让我们分解下面的脚本。首先我们调用ActiveDirectory模块,然后我们调用CSV。这部分效果很好。

我们可以使用以下提供的代码对其进行测试:

Import-Module ActiveDirectory
$csvcontent = Import-CSV -Path "C:Program Files (x86)AWS ToolsPowerShellAWSPowerShellimport_create_ad_users_2a.csv"
$csvcontent | Out-GridView

这应该显示原始数据的某些内容,但一个例子是:

名字 |姓氏 |密码 |描述 |国家

卡尔西克 |CSVScript |79HKJ#p8 |用户测试 |挪威

一旦我们可以确认列是正确的。我们可以运行脚本

当您使用导入 CSV 时,它会导入您定义为 pipline($_( 的列。给定名称(。这允许我们不创建另一个变量。从导入 CSV cmdlet 调用它将仅使用你在原始数据(CSV 文件(中提供的字段。

您可以将以下内容另存为名为 NewUser_CSV.ps1 的PS_Script

下面的脚本只会查看您放入列的内容。如果某些内容不正确,则表示CSV中的数据是错误的。这是使用 CSV 文件的基本添加 AD 用户,没有重大错误处理。

我们将使用脚本 cmdlet 收集日志

#RUN AS ADMIN!
Start-Transcript -Path "C:Program Files (x86)AWS ToolsPowerShellAWSPowerShellimport_create_ad_users_2a.log"
Import-Module ActiveDirectory
$csvcontent = Import-CSV -Path "C:Program Files (x86)AWS ToolsPowerShellAWSPowerShellimport_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好运。

最新更新