【问题标题】:Avoid duplicate Bulk-New-ADUser Creation via a csv file避免通过 csv 文件创建重复的 Bulk-New-ADUser
【发布时间】:2016-09-10 19:33:50
【问题描述】:

我对此脚本进行了一些修改。 UserID 通常是用户的名字后跟他们的姓氏。 我需要做的是在创建之前比较与每个用户名关联的代理地址和 SAMAccountName 属性。 所以我的意思是说 Jack Sparrow ,如果 jsparrow 已经在使用,那么脚本将尝试作为 jasparrow (名字的第一个和第二个字母)并且在使用中的 jasparrow 也会是 jacsparrow 等等。我想避免重复的用户名。 2-我决定使用 FirstName 的前两个字母、day/month 和 Lastname 的前两个字母来制作“有趣”的密码会更好。最终的结果是用户得到一个类似“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
}

【问题讨论】:

  • 仅供参考,您的脚本将生成“JackS”,而不是“JSparrow”作为用户名
  • 感谢老兄,其实我知道这一点。顺便说一句,您对我的问题有任何答案吗?
  • 如果它们都在使用中,包括JackSparrow怎么办?

标签: windows powershell csv


【解决方案1】:

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

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)

【讨论】:

  • 非常感谢,顺便说一句,在哪里使用密码变量有意义?在 useritems 内或之前或之后 do while 循环?
  • $password 需要替换您当前在哈希表中的$person.password。将其用作convertto-securestring的输入
  • 假设我想成为 SAMAccountName/UserPrincipalName 的小写字母,例如 jsparrow 因为我在 CSV 文件中使用大写字母,例如 Jack Sparrow。会有什么问题吗?最后一个问题:我也需要将用户添加到一个或多个安全组,我该怎么做?
  • Upn 和 Samaccountname 不区分大小写,所以没关系。创建用户后使用Add-ADGroupMember 将用户添加到组。
  • $b = Get-Content C:\Groups.txt Foreach($a in $b) { Add-Adgroupmember -identity $a -Members $user } 在 new-aduser cmdlet 之后我将使用我说的对吗?
猜你喜欢
  • 2018-03-17
  • 1970-01-01
  • 2013-10-18
  • 2017-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
相关资源
最近更新 更多