避免通过csv文件创建重复的Bulk-New-ADUser

时间:2016-09-10 19:33:51

标签: windows powershell csv

我对此脚本进行了一些修改。 UserID通常是用户的名字,后跟姓氏。 我需要做的是比较代理地址和SAMAccountName属性在创建之前与每个用户名关联。 我的意思是让Jack Sparrow说,如果jsparrow已经在使用,那么脚本会尝试jasparrow(名字的第一个和第二个字母),并且在使用jasparrow时,将是jacsparrow等等。我想避免重复的用户名。 2 - 我决定制作使用FirstName的前两个字母,日/月,姓氏的前两个字母的“有趣”密码会更好。最终结果是用户获得了类似“Ja1009Sp”的密码。

Firstname,LastName,Department,Manager,MobilePhone
Jack,Sparrow,IT,jsmith,1 88 635 5254-0551
John Smith,Sparrow,Finance,jsmith,188 635 5254-0554

脚本:

Import-Module ActiveDirectory
$UserList = Import-CSV -Path C:\Temp\CreateUsers.csv
$targetOU='OU=usersOU,DC=My,DC=Domain,DC=org'
$upnDomain='sec.local'

foreach($Person in $UserList){
     $useritems=@{
          GivenName=$Person.Firstname
          Surname=$Person.LastName
          Department=$Person.Department
          AccountPassword=ConvertTo-SecureString -String $Person.Password -AsPlainText -force
          ChangePasswordAtLogon=$false
      Enabled=$true
          DisplayName="$($Person.Firstname) $($Person.Lastname)"
      Manager=$Person.Manager
      MobilePhone=$Person.MobilePhone
          Name="$($Person.Firstname) $($Person.Lastname)"
          SamAccountName="$($Person.Firstname+$Person.LastName.Substring(0,1))"
          UserPrincipalName="$($Person.FirstName+$Person.LastName.Substring(0,1))@$upnDomain"
      Company="Contoso"
     }

     New-ADUser  @useritems -Path $targetOU
}

1 个答案:

答案 0 :(得分:0)

尝试这样的事情..我没有AD可用的atm。测试Get-ADUser - 用于查找现有帐户的查询,因此可能需要进行一些调整。

foreach ($Person in $UserList) {

    #Reset counters
    $i = 1
    $n = 1

    do {
        if($i -le $person.Firstname.Length) {
            $user = "$($Person.Firstname.Substring(0,$i)+$Person.LastName)"
            $i++
        } else {
            #All combinations in use, adding number
            $user = "$($Person.Firstname.Substring(0,1)+$Person.LastName+$n)"
            $n++
        }
    } while ((Get-ADUser -Filter "(samAccountName -eq '$user') -or (proxyaddresses -like '$user*')"))

    #Result username
    #$user

    #$useritems = @{ 
        #.....
        #SamAccountName=$user
        #UserPrincipalName="$user@$upnDomain"
        #....
    #}


}

如果所有组合都在使用,包括jacksparrow,它会尝试jsparrow1 ++,直到找到一个空闲数字。

密码可以使用以下方式生成:

$Password = "{0}{1}{2}" -f $Person.Firstname.Substring(0,2), (Get-Date).ToString("ddMM"), $Person.Lastname.Substring(0,2)