现在我有一个代码来创建用户在一个域。你传递3个变量,它创建帐户。它可以创建帐户就好。
由于我们雇佣了数百名员工,因此它还需要能够处理新帐户,这些帐户最终可能会使用与现有帐户相同的生成名称。
我想要的是让它看到当前生成的用户名已经是一个现有的帐户,并提供一个提示输入一个自定义用户名,然后继续创建。到目前为止,如果我运行代码,并有一个冲突,代码只是不会运行错误。
"New-ADUser : The operation failed because UPN value provided for addition/modification is not unique forest-wide"
我目前掌握的情况是:
param($firstname, $lastname, $location)
Import-Module ActiveDirectory
$username = ($firstname.Substring(0,1) + $lastname).ToLower()
$userExists = Get-ADUser -Filter {sAMAccountName -eq $username}
if ($userExists -ne $null) {
Write-Host "The username '$username' already exists in Active Directory. Please enter a custom username:"
$customUsername = Read-Host
$username = $customUsername
}
$path = "OU=Users,OU=$location,OU=GS,DC=domain,DC=com"
New-ADUser `
-Name "$firstname $lastname" `
-GivenName $firstname `
-Surname $lastname `
-UserPrincipalName "$username@domain.com" `
-SamAccountName $username `
-AccountPassword (ConvertTo-SecureString "Password123" -AsPlainText -Force) `
-Path $path `
-ProfilePath "\\domain\homes\profiles\$username" `
-ChangePasswordAtLogon 1 `
-Enabled 1 `
-OtherAttributes @{'gidNumber'='711132'; 'uid'= '$username'} `
Add-ADGroupMember `
-Identity "$location" -Members $username
$user = Get-ADUser -Identity $username
$sid = $user.SID
$last4DigitsOfObjectSid = $sid.Value.Substring($sid.Value.Length - 4)
$newUidNumber = "71$last4DigitsOfObjectSid"
Set-ADUser -Identity $username -Replace @{'uidNumber'=$newUidNumber}
1条答案
按热度按时间ttcibm8c1#
您可以使用while循环来测试在继续创建新用户之前用户名是否已被使用。
此外,我建议使用splatting来保持所有用户参数的结构清晰,而不必使用那些讨厌的反勾号(或者非常非常长的代码行)
如果还指定switch
PassThru
,New-ADUser cmdlet将立即返回新创建的用户对象,因此可以省略额外的Get-ADUser调用。