Powershell 检查是否存在批量复制的ADUSER
我正在尝试制作一个PowerShell脚本,通过csv文件批量添加用户。如果用户名已经存在,我想将数字1添加到用户名中。我该怎么做?我想我可以做个假设Powershell 检查是否存在批量复制的ADUSER,powershell,Powershell,我正在尝试制作一个PowerShell脚本,通过csv文件批量添加用户。如果用户名已经存在,我想将数字1添加到用户名中。我该怎么做?我想我可以做个假设 foreach ($User in $ADUsers) { # Selvlagde variabler for opprettelse av brukere $Password = Get-RandomCharacters -length 20 -characters 'ABCDEFGHKLMNOPRSTUVWXYZab
foreach ($User in $ADUsers) {
# Selvlagde variabler for opprettelse av brukere
$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
if (condition) {
}
# Bruker splatting for å lagre info om brukere
$userParams = @{
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)
}
New-ADUser @userParams
您可以通过测试具有该SamAccountName的用户是否已经存在来实现这一点。大概是这样的:
foreach ($User in $ADUsers) {
# Selvlagde variabler for opprettelse av brukere
$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()
# test if a user with that SamAccountName already exists, add an index number if needed
$n = 1 # start index at 1
$newName = $Username # copy to a new variable
while ($true) { # start an endless loop
$usr = Get-ADUser -Filter "SamAccountName -eq '$newName'" -ErrorAction SilentlyContinue
if (!$usr) {
$Username = $newName # assign the $Username variable the unique value
break # exit the loop if the $username is unique in the domain
}
# construct a new username by adding the index to it
$newName = '{0}{1}' -f $Username, $n++
}
$Email = $Username + '@ONPremiumIT.com'
$DisplayName = $User.GivenName + ' ' + $User.SurName
# Bruker splatting for å lagre info om brukere
$userParams = @{
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)
}
New-ADUser @userParams
}
另外,用户名的测试必须在使用$username变量进行更多操作之前进行,比如将其用于$Email变量。否则,你可能也会有重复的…哇,非常感谢!!我刚刚尝试了你的代码,但我收到一条错误消息,说“试图向目录中添加一个名称已在使用的对象”。这是当我试图通过与之前相同的csv文件添加新用户时,为了再次获得所有人,但用户名中的数字为1。当我这样做时,我尝试添加具有givenname、姓氏和displayname中相同凭据的用户,但我为他们创建了一个新用户名。这是可能的,对吗?@Maria.A是的,
Name
属性在同一域中也应该是唯一的。通常,在这种情况下,人们试图通过添加首字母使其独特。对于这样的情况,幸运的是不会经常发生,我们幸运地得到了这样一条很好的描述性错误消息,因此我们不得不为该用户想出一个创造性的、但可接受的新名称;)