使用 csv 文件批量添加用户

Add users in bulk with csv file

我正在尝试制作一个从 csv 文件批量创建用户的脚本。我用 5 个用户测试了脚本,但收到错误消息“New-ADUser:属性的值不在可接受的值范围内。”我到处找,找不到错误!

function Get-RandomCharacters($length, $characters) { 
    $random = 1..$length | ForEach-Object { Get-Random -Maximum $characters.length } 
    $private:ofs="" 
    return [String]$characters[$random]
}

$ADUsers = Import-csv C:\Users\Admin\Users.csv -Delimiter ";"

foreach ($User in $ADUsers)
{
    $Password  = Get-RandomCharacters -length 20 -characters 'ABCDEFGHKLMNOPRSTUVWXYZabcdefghiklmnoprstuvwxyz1234567890!._?/'
    $Username  = $User.GivenName.substring(0,3) + $User.SurName.substring(0,3)
    $Username  = $Username.Replace('æ','ae')
    $Username  = $Username.Replace('ø','o')
    $Username  = $Username.Replace('å','aa')
    $Username  = $Username.ToLower()
    $Username  = $Username.Trim()
    $Email       = $Username + '@ONPremiumIT.com'
    $DisplayName = $User.GivenName + ' ' + $User.SurName

    New-ADUser `
    -Path $User.Path `
    -SamAccountName $Username `
    -UserPrincipalName $Email `
    -Name "$User.GivenName $User.SurName" `
    -GivenName $User.GivenName `
    -Surname $User.SurName `
    -Enabled $True `
    -ChangePasswordAtLogon $false `
    -DisplayName "$Displayname" `
    -Department $Department `
    -AccountPassword (convertto-securestring $Password -AsPlainText -Force)
}

csv 文件:

GivenName;SurName;Department;Path
Tobias;Santelmann;it-drift;OU=it-drift,OU=onprit-brukere,DC=sec,DC=core
Maria;Aas;dev-team;OU=dev-team,OU=onprit-brukere,DC=sec,DC=core
Anniken;Arildset;renhold;OU=renhold,OU=onprit-brukere,DC=sec,DC=core
Thea;Urne;regnskap;OU=regnskap,OU=onprit-brukere,DC=sec,DC=core
Marthea;Wichstad;hr;OU=hr,OU=onprit-brukere,DC=sec,DC=core

错误来自-Name "$User.GivenName $User.SurName",应该是-Name "$($User.GivenName) $($User.SurName)"

示例:

"$User.GivenName $User.SurName"   # --> @{GivenName=Tobias; Surname=Santelmann}.GivenName @{GivenName=Tobias; Surname=Santelmann}.SurName

但是当使用 Subexpression operator $(..) 时,它会做你想要的:

"$($User.GivenName) $($User.SurName)" # --> Tobias Santelmann

此外,当使用大量参数时,您可能很难在使用这些反引号时发现错误。

我建议为此使用 Splatting

$userParams = @{
    Path                  = $User.Path
    SamAccountName        = $Username
    UserPrincipalName     = $Email
    Name                  = '{0} {1}' -f $User.GivenName, $User.SurName  # or: "$($User.GivenName) $($User.SurName)"
    GivenName             = $User.GivenName
    Surname               = $User.SurName
    Enabled               = $true
    ChangePasswordAtLogon = $false
    DisplayName           = $Displayname
    Department            = $Department
    AccountPassword       = (ConvertTo-SecureString $Password -AsPlainText -Force)
}

New-ADUser @userParams