Home > front end >  Create a user on premise based on firstname and lastname
Create a user on premise based on firstname and lastname

Time:11-02

I am in a hybrid environment and I would like to create a user from exchange using a script.

Goals:

  • Create an account (Last name first character of first name). If an account exists, add a number at the end. For example, King, John (Samaccountname should be KingJ1.. if exists, KingJ2...)
  • The UPN must be the first name.last name... If the last name already exists add a number to the last name. For example, King, John (UPN should be john.king1@contoso, if exists [email protected]...)

If anyone can help me it would be really appreciated so that I can save some time. Thanks in advance

Connect-ExchangeOnline

$UserCredential = Get-Credential

$SessionEX2016 = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri .../PowerShell/ -Authentication Kerberos -Credential $UserCredential

Import-PSSession $SessionEX2016 -DisableNameChecking

$FirstName = Read-Host "Please enter the Firstname"
$LastName = Read-Host "Please enter the Lastname"
$NewUserLoginID = Read-Host "Please enter a new Login ID" #if the samaccountname exists add a digit
$Manager = Read-Host "Please enter the Login ID of the manager"
$Name = "$($LastName), $($FirstName)"
$DisplayName = $Name
$UPN = "$($FirstName).$($LastName)@contoso.com" #if the upn exists, add a digit to the last name
$PW = "Welcome$(Get-Random -minimum 0001 -maximum 9999)!"
$OU = "OU=Users,OU=Accounts,DC=com,DC=contoso" # it will creates the user in this OU by default and will move the user to OU where the manager is.


#Check to see if the user already exists in AD
if (Get-ADUser -F {SamAccountName -eq $NewUserLoginID})
{
     #If user does exist, add a digit to samccountname and upn."
}
else
{


#Create User On-Premise
New-RemoteMailbox -Name $Name -FirstName $FirstName -LastName $LastName -SamAccountName $NewUserLoginID -OnPremisesOrganizationalUnit $OU -UserPrincipalName $UPN -Password (ConvertTo-SecureString -AsPlainText $PW -Force) -ResetPasswordOnNextLogon:$true -Archive



$ManagerOU = ((Get-ADUser -Identity $Manager).DistinguishedName -split '(?<!\\),', 2)[-1]
# next, get the user object of the user you want to move
$NewUser = Get-ADUser -Identity $NewUserLoginID

# now move NewUser to the OU where Manager is in
$NewUser | Move-ADObject -TargetPath $ManagerOU

}

CodePudding user response:

You can add while loops to check if a name already exists or not and if so, append a sequence counter to it.

I would also use Splatting for the New-RemoteMailbox cmdlet to make the code more readable (no need for those very long lines of code)

Something like this:

Connect-ExchangeOnline

$UserCredential = Get-Credential
$SessionEX2016 = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri .../PowerShell/ -Authentication Kerberos -Credential $UserCredential

Import-PSSession $SessionEX2016 -DisableNameChecking

$OU = "OU=Users,OU=Accounts,DC=com,DC=contoso"
$PW = "Welcome$(Get-Random -minimum 0001 -maximum 9999)!"

$FirstName = Read-Host "Please enter the Firstname for the new user"
$LastName  = Read-Host "Please enter the Lastname for the new user"

$AccountName = $LastName   $FirstName[0]  # Last name   first character of first name
# test if a user with that accountname already exists and if so, append a sequence number
$count = 1
while (Get-ADUser -Filter "SamAccountName -eq '$AccountName'") {
    $AccountName = '{0}{1}{2}' -f $LastName, $FirstName[0], $count  
}

$UPN = "$($FirstName).$($LastName)@contoso.com" #if the upn exists, add a digit to the last name
# test if a user with that UserPrincipalName already exists and if so, append a sequence number
$count = 1
while (Get-ADUser -Filter "UserPrincipalName -eq '$UPN'") {
    $UPN = '{0}.{1}{2}@contoso.com' -f $FirstName, $LastName, $count  
}


# create a Hashtable for splatting parameters
$userParams = @{
     Name                         = "$($LastName), $($FirstName)"
     DisplayName                  = "$($LastName), $($FirstName)"
     FirstName                    = $FirstName
     LastName                     = $LastName
     SamAccountName               = $AccountName
     OnPremisesOrganizationalUnit = $OU
     UserPrincipalName            = $UPN
     Password                     = $PW | ConvertTo-SecureString -AsPlainText -Force
     ResetPasswordOnNextLogon     = $true
     Archive                      = $true
}

# Create User On-Premise and move to the managers OU if possible
try {
    New-RemoteMailbox @userParams -ErrorAction Stop
    # now check if we can get a managers OU
    $Manager = Read-Host "Please enter the Login ID of the manager"
    $adManager = Get-ADUser -Filter "SamAccountName -eq '$Manager'"
    if ($adManager) {
        $ManagerOU = ($adManager.DistinguishedName -split '(?<!\\),', 2)[-1]
        # next, get the user object of the new user and move it to the managers OU
        Get-ADUser -Identity $AccountName | Move-ADObject -TargetPath $ManagerOU
    }
    else {
        Write-Error "Could not find a manager with SamAccountName '$Manager'"
    }
}
catch {
    Write-Error $_.Exception.Message
}
  • Related