Еще один вопрос, касающийся этого страшного сценария.Я столкнулся с кирпичной стеной.То, как создаются имена пользователей в моей организации, это SurnameInitial.Однако, если учетная запись уже существует, мы ставим число в конце.Если этот номер существует, он меняется на следующий номер (TestT, TestT1, TestT2 ... и т. Д.)
Я не могу понять, как заставить скрипт сделать это, он просто не создает учетную записьесли он уже существует в AD
Ниже приведен соответствующий код, который поможет вам понять, как он в настоящее время управляет созданием учетной записи.
#region Unique Field Data
# Acquiring unique field data
$GivenName = Read-Host -Prompt "What Is The New User's First Name?"
Write-Host " "
$Surname = Read-Host -Prompt "What Is The New User's Last Name?"
Write-Host " "
$Description = Read-Host -Prompt "What Is The Job Title & Department Of The New User? [Please format as Job Title – Dept]"
Write-Host " "
#endregion
#region Data Generation
$DisplayName = $GivenName + " " + $Surname
$Mail = $GivenName + "." + $Surname + "@" + "RE"
$MailAlias = $GivenName + "." + $Surname + "@" + $DNSRoot2
$SInitial = $Surname[0]
$Initial = $GivenName[0]
$SAMAccountName = $Surname+$Initial
$SAMAccountLower = $SAMAccountName.ToLower()
$UserPrincipalName = $Surname+$Initial
$HD = "U"
$HDir = "\\RBHFILRED002\"
$AC = "Users_01$\"
$DH = "Users_02$\"
$IM = "Users_03$\"
$NS = "Users_04$\"
$TZ = "Users_05$\"
$Folder = if ($SInitial -in 'a','b','c'){$AC}
ElseIf ($SInitial -in 'd','e','f', 'g','h'){$DH}
ElseIf ($SInitial -in 'i','j','k', 'l','m'){$IM}
ElseIf ($SInitial -in 'n','o','p', 'q','r','s'){$NS}
Else {$TZ}
$group1 = "zz Everyone"
$group2 = "Safeboot Domain Users"
cls
#endregion
#region User Creation
# Create The User
Get-ChildItem
New-ADUser -path "OU=Users,OU=RBFT,DC=rbbh-tr,DC=nhs,DC=uk" -SamAccountName $Surname$Initial -Name $DisplayName -DisplayName $DisplayName -GivenName $GivenName -Surname $Surname -EmailAddress $Mail -UserPrincipalName $Surname$Initial@rbbh-tr.nhs.uk -Title $title -HomeDrive $HD -HomeDirectory $HDir$Folder$Surname$Initial -Description $Description -ChangePasswordAtLogon $true -PasswordNeverExpires $false -AccountPassword $defpassword -Enabled $true -PassThru
Add-ADGroupMember -Identity $group1 -Members $SAMAccountName
Add-ADGroupMember -Identity $group2 -Members $SAMAccountName
Write-Host " "
cls
echo "Please Wait Whilst We Find The AD Account & Create The Exchange Mailbox.."
Start-Sleep -s 30
Enable-Mailbox -Identity $SAMAccountName
cls
#endregion
Надеюсь, мой код понятен, и его можно понять и надеемся,Вы, ребята, можете предложить поддержку.
Упреждающее спасибо
РЕДАКТИРОВАТЬ НИЖЕ
Итак, я расширил сценарий, используяпредложение ниже.
#region User Creation
# Create The User
$i = 1
$AccountCreated = $False
Do {
Try {
New-ADUser -path "OU=Users,OU=RBFT,DC=rbbh-tr,DC=nhs,DC=uk" -SamAccountName $Surname$Initial -Name $DisplayName -DisplayName $DisplayName -GivenName $GivenName -Surname $Surname -EmailAddress $Mail -UserPrincipalName $Surname$Initial@rbbh-tr.nhs.uk -Title $title -HomeDrive $HD -HomeDirectory $HDir$Folder$Surname$Initial -Description $Description -ChangePasswordAtLogon $true -PasswordNeverExpires $false -AccountPassword $defpassword -Enabled $true -PassThru
Add-ADGroupMember -Identity $group1 -Members $SAMAccountName
Add-ADGroupMember -Identity $group2 -Members $SAMAccountName
Set $AccountCreated to $True
}
Catch {
New-ADUser -path "OU=Users,OU=RBFT,DC=rbbh-tr,DC=nhs,DC=uk" -SamAccountName $Surname$Initial$I -Name $DisplayName -DisplayName $DisplayName -GivenName $GivenName -Surname $Surname -UserPrincipalName $Surname$Initial$I@rbbh-tr.nhs.uk -Title $title -HomeDrive $HD -HomeDirectory $HDir$Folder$Surname$Initial -Description $Description -ChangePasswordAtLogon $true -PasswordNeverExpires $false -AccountPassword $defpassword -Enabled $true -PassThru
Add-ADGroupMember -Identity $group1 -Members $SAMAccountName
Add-ADGroupMember -Identity $group2 -Members $SAMAccountName
Increment $I
}
}
Until ($AccountCreated -eq $True)
cls
echo "Please Wait Whilst We Find The AD Account & Create The Exchange Mailbox.."
Start-Sleep -s 30
Enable-Mailbox -Identity $SAMAccountName
cls
#endregion
#region Post-Creation
echo "Username:" $SAMAccountName
Write-Host " "
echo "Password:" "Welcome123"
Write-Host " "
echo "Email:" $Mail
Write-Host " "
echo "Job Title - Department:" $Description
Write-Host " "
echo "Home Directory:" $HDir$Folder$Surname$Initial
Write-Host " "
#endregion
Однако, это создает учетную запись.Но не обновляет создание обмена с увеличенным именем пользователя (то есть не создает почтовый ящик), не создает правильный домашний каталог и не отображает правильные сведения, основанные на том, увеличен ли он.
Iне могу понять, как теперь сделать это
РЕДАКТИРОВАТЬ ВТОРОЕ
Следуя помощи Джеймса С., я создал следующий код.Тем не менее, он не создает учетную запись почты.И теперь выдает ошибку.
$defaultname = $SAMAccountName
$i = 1
cls
#endregion
#region User Creation
# Create The User
While ((Get-ADUser -Identity $SAMAccountName) -ne $null){
$SamAccountName = $defaultname + [string]$i
$i++
}
$NewUserParams = @{
path = "OU=Users,OU=RBFT,DC=rbbh-tr,DC=nhs,DC=uk"
SamAccountName = $SAMAccountName
Name = $DisplayName
DisplayName = $DisplayName
GivenName = $GivenName
Surname = $Surname
EmailAddress = $Mail
UserPrincipalName = "$SAMAccountName@rbbh-tr.nhs.uk"
Title = $title
HomeDrive = $HomeDrive
HomeDirectory = "$HDir$Folder$SAMAccountName"
Description = $Description
ChangePasswordAtLogon = $true
PasswordNeverExpires = $false
AccountPassword = $defpassword
Enabled = $true
}
New-ADUser @NewUserParams
Add-ADGroupMember -Identity $group1 -Members $SAMAccountName
Add-ADGroupMember -Identity $group2 -Members $SAMAccountName
cls
echo "Please Wait Whilst We Find The AD Account & Create The Exchange Mailbox.."
Start-Sleep -s 30
Enable-Mailbox -Identity $SAMAccountName
cls
#endregion
#region Post-Creation
echo "Username:" $SAMAccountName
Write-Host " "
echo "Password:" "Welcome123"
Write-Host " "
echo "Email:" $Mail
Write-Host " "
echo "Job Title - Department:" $Description
Write-Host " "
echo "Home Directory:" $HDir$Folder$SAMAccountName
Write-Host " "
#endregion
Выдает следующую ошибку
Name : Microsoft.Exchange.Management.PowerShell.E2010
PSVersion : 1.0
Description : Admin Tasks for the Exchange Server
Name : Microsoft.Exchange.Management.Powershell.Support
PSVersion : 1.0
Description : Support Tasks for the Exchange Server
This tool is to be used for creating User Accounts for the RBFT Domain under Ultima Business Solutions only. If this applies, please hit any key to continue.
Get-ADUser : Cannot find an object with identity: 'TimmsJ1' under: 'DC=rbbh-tr,DC=nhs,DC=uk'. At C:\Users\timmsj\Desktop\Scripts\User_Creation\RBFT_UC_Dev.ps1:139 char:9
+ While ((Get-ADUser -Identity $SAMAccountName) -ne $null){
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (TimmsJ1:ADUser) [Get-ADUser], ADIdentityNotFoundException
+ FullyQualifiedErrorId : Cannot find an object with identity: 'TimmsJ1' under: 'DC=rbbh-tr,DC=nhs,DC=uk'.,Microsoft.ActiveDirectory.Management.Comm ands.GetADUser
New-ADUser : An attempt was made to add an object to the directory with a name that is already in use At C:\Users\timmsj\Desktop\Scripts\User_Creation\RBFT_UC_Dev.ps1:163 char:1
+ New-ADUser @NewUserParams
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (CN=Timms James,...tr,DC=nhs,DC=uk
:String) [New-ADUser], ADException
+ FullyQualifiedErrorId : An attempt was made to add an object to the dire ctory with a name that is already in use,Microsoft.ActiveDirectory.Managem ent.Commands.NewADUser
Add-ADGroupMember : Cannot find an object with identity: 'TimmsJ1' under: 'DC=rbbh-tr,DC=nhs,DC=uk'. At C:\Users\timmsj\Desktop\Scripts\User_Creation\RBFT_UC_Dev.ps1:164 char:1
+ Add-ADGroupMember -Identity $group1 -Members $SAMAccountName
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (TimmsJ1:ADPrincipal) [Add-ADGro upMember], ADIdentityNotFoundException
+ FullyQualifiedErrorId : SetADGroupMember.ValidateMembersParameter,Micros oft.ActiveDirectory.Management.Commands.AddADGroupMember
Add-ADGroupMember : Cannot find an object with identity: 'TimmsJ1' under: 'DC=rbbh-tr,DC=nhs,DC=uk'. At C:\Users\timmsj\Desktop\Scripts\User_Creation\RBFT_UC_Dev.ps1:165 char:1
+ Add-ADGroupMember -Identity $group2 -Members $SAMAccountName
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (TimmsJ1:ADPrincipal) [Add-ADGro upMember], ADIdentityNotFoundException
+ FullyQualifiedErrorId : SetADGroupMember.ValidateMembersParameter,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember
Please Wait Whilst We Find The AD Account & Create The Exchange Mailbox..
Enable-Mailbox : The operation couldn't be performed because object 'TimmsJ1' couldn't be found on 'ad1.rbbh-tr.nhs.uk'. At C:\Users\timmsj\Desktop\Scripts\User_Creation\RBFT_UC_Dev.ps1:171 char:1
+ Enable-Mailbox -Identity $SAMAccountName
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (0:Int32) [Enable-Mailbox], Manage mentObjectNotFoundException
+ FullyQualifiedErrorId : 2B788636,Microsoft.Exchange.Management.Recipient Tasks.EnableMailbox
Username:
TimmsJ1
Password:
Welcome123
Email:
James.Timms@royalberkshire.nhs.uk
Job Title - Department:
Ultima - Ultima
Home Directory:
\\RBHFILRED002\Users_05$\TimmsJ1
You will need to manually set the new user's group memberships. Please Do
This Before Sending The User's Account Details.
Press Any Key To Close
Создает учетную запись пользователя и электронную почту, если $ SAMAccount является дубликатом, однако, если имя и фамилия являютсядубликаты не создадут учетную запись вообще.
Это для Национального фонда здравоохранения в Великобритании, поэтому очевидно, что многие сотрудники, особенно с общими именами, будут иметь дубликаты имен.
Любыеисправить это?
Редактировать три
Вид исправленной выше проблемы, создав новую строку.Тем не менее, по-прежнему остается, что эта учетная запись будет отказываться создавать, если имя First + Second является дубликатами другого.
Это проблема, как указывалось ранее, из-за того, что в NHS есть много людей, которые имеютто же имя.
#region Data Generation
$DisplayName = $Surname + " " + $GivenName
$Mail = $GivenName + "." + $Surname + "@" + "royalberkshire.nhs.uk"
$MailAlias = $GivenName + "." + $Surname + "@" + $DNSRoot2
$SInitial = $Surname[0]
$Initial = $GivenName[0]
$SAMAccountName = $Surname + "" + $Initial
$SAMAccountLower = $SAMAccountName.ToLower()
$UserPrincipalName = $Surname+$Initial
$HD = "U"
$HDir = "\\RBHFILRED002\"
$AC = "Users_01$\"
$DH = "Users_02$\"
$IM = "Users_03$\"
$NS = "Users_04$\"
$TZ = "Users_05$\"
$Folder = if ($SInitial -in 'a','b','c'){$AC}
ElseIf ($SInitial -in 'd','e','f', 'g','h'){$DH}
ElseIf ($SInitial -in 'i','j','k', 'l','m'){$IM}
ElseIf ($SInitial -in 'n','o','p', 'q','r','s'){$NS}
Else {$TZ}
$group1 = "zz Everyone"
$group2 = "Safeboot Domain Users"
$defaultname = $SAMAccountName
$email = $GivenName + "." + $Surname
$i = 1
cls
#endregion
#region User Creation
# Create The User
While ((Get-ADUser -Identity $SAMAccountName -ErrorAction SilentlyContinue) -ne $null){
$SamAccountName = $defaultname + [string]$i
$Mail = $email + [string]$i + "@" + "royalberkshire.nhs.uk"
$i++
}
$NewUserParams = @{
path = "OU=Users,OU=RBFT,DC=rbbh-tr,DC=nhs,DC=uk"
SamAccountName = $SAMAccountName
Name = $DisplayName
DisplayName = $DisplayName
GivenName = $GivenName
Surname = $Surname
EmailAddress = $Mail
UserPrincipalName = "$SAMAccountName@rbbh-tr.nhs.uk"
Title = $title
HomeDrive = $HomeDrive
HomeDirectory = "$HDir$Folder$SAMAccountName"
Description = $Description
ChangePasswordAtLogon = $true
PasswordNeverExpires = $false
AccountPassword = $defpassword
Enabled = $true
}
New-ADUser @NewUserParams
Add-ADGroupMember -Identity $group1 -Members $SAMAccountName
Start-Sleep -s 10
Add-ADGroupMember -Identity $group2 -Members $SAMAccountName
cls
echo "Please Wait Whilst We Find The AD Account & Create The Exchange Mailbox.."
Start-Sleep -s 30
Enable-Mailbox -Identity $SAMAccountName
cls
#endregion
Еще раз, есть идеи?