我对此脚本进行了一些修改。 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
}
答案 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)