Powershell AD Script - добавьте номер в конец имени учетной записи - PullRequest
0 голосов
/ 05 июня 2018

Еще один вопрос, касающийся этого страшного сценария.Я столкнулся с кирпичной стеной.То, как создаются имена пользователей в моей организации, это 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

Еще раз, есть идеи?

Ответы [ 3 ]

0 голосов
/ 05 июня 2018

хорошо, просто чтобы дать вам идею, попробуйте что-то вроде этого

$Myusername = "test"
$Mastername = $Myusername
For ($i=0; $i -le 10; $i++) {
Write-Host $Myusername
$myusername = $Mastername + $i
}
0 голосов
/ 05 июня 2018

Использование цикла Do / While с Get-ADUser для поиска свободного имени пользователя и $VariableName++ для увеличения номера имени пользователя в каждом цикле.

Также обновлен ваш New-ADUser команда для использования splatting , поскольку это значительно облегчает чтение.

#didn't include rest of your code above here as it hasn't changed

$group1 = "zz Everyone"
$group2 = "Safeboot Domain Users"

$defaultname = $SAMAccountName
$i = 1

While ((Get-ADUser -Identity $SAMAccountName -ErrorAction SilentlyContinue) -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          = "$GivenName.$Surname$i@royalberkshire.nhs.uk"
    UserPrincipalName     = "$SAMAccountName@rbbh-tr.nhs.uk"
    Title                 = $title
    HomeDrive             = $HomeDrive
    HomeDirectory         = "$HDir$Folder$Surname$Initial"
    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

Write-Output "Please Wait Whilst We Find The AD Account & Create The Exchange Mailbox.."
Start-Sleep -s 30
Enable-Mailbox -Identity $SAMAccountName
0 голосов
/ 05 июня 2018

вы можете поместить создание своей учетной записи в цикл до тех пор, пока внутри не будет попытки, т.е. что-то вроде этого полусудо-кода

$i = 1
$AccountCreated = $False
Do {
$i = 1
$AccountCreated = $False
$AccountName = $Surname$Initial
Do {
Try {
New-ADUser -path "OU=Users,OU=RBFT,DC=rbbh-tr,DC=nhs,DC=uk" -SamAccountName 
$AccountName = $Surname$Initial -Name $DisplayName -DisplayName $DisplayName 
-GivenName $GivenName -Surname $Surname -EmailAddress $Mail - 
UserPrincipalName $AccountName@rbbh-tr.nhs.uk -Title $title -HomeDrive $HD - 
HomeDirectory $HDir$Folder$AccountName -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 {
$AccountName = $Surname$Initial + $i
Increment $I
}
}
}
Until ($AccountCreated -eq $True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...