2

I modified a PowerShell script to create AD and Office 365 accounts automatically, it works fine but helpdesk need to manually type out the OU path.

Is there a way to pre-define OU path & assign number to it so if the helpdesk press 1 it chooses the OU path assigned to number 1 and so on?

Name              DistinguishedName
----              -----------------
Departments       OU=Departments,OU=Users,OU=Test Enviorment,OU=New Zealand,OU=BNZ,DC=BNZTEST,DC=COM
Operational       OU=Operational,OU=Departments,OU=Users,OU=Test Enviorment,OU=New Zealand,OU=BNZ,DC=BNZTEST,DC=COM
Normal            OU=Normal,OU=Operational,OU=Departments,OU=Users,OU=Test Enviorment,OU=New Zealand,OU=BNZ,DC=BNZTE..
Sales             OU=Sales,OU=Departments,OU=Users,OU=Test Enviorment,OU=New Zealand,OU=BNZ,DC=BNZTEST,DC=COM
Finance           OU=Finance,OU=Departments,OU=Users,OU=Test Enviorment,OU=New Zealand,OU=BNZ,DC=BNZTEST,DC=COM
IT                OU=IT,OU=Departments,OU=Users,OU=Test Enviorment,OU=New Zealand,OU=BNZ,DC=BNZTEST,DC=COM
Application       OU=Application,OU=IT,OU=Departments,OU=Users,OU=Test Enviorment,OU=New Zealand,OU=BNZ,DC=BNZTEST,D..
Infrastructure    OU=Infrastructure,OU=IT,OU=Departments,OU=Users,OU=Test Enviorment,OU=New Zealand,OU=BNZ,DC=BNZTES..
Marketing         OU=Marketing,OU=Departments,OU=Users,OU=Test Enviorment,OU=New Zealand,OU=BNZ,DC=BNZTEST,DC=COM
NewBusiness       OU=NewBusiness,OU=Departments,OU=Users,OU=Test Enviorment,OU=New Zealand,OU=BNZ,DC=BNZTEST,DC=COM
ExisitingBusiness OU=ExisitingBusiness,OU=Departments,OU=Users,OU=Test Enviorment,OU=New Zealand,OU=BNZ,DC=BNZTEST,D..
Underwritter      OU=Underwritter,OU=Departments,OU=Users,OU=Test Enviorment,OU=New Zealand,OU=BNZ,DC=BNZTEST,DC=COM
#Import needed module.
Import-Module ActiveDirectory

#Prompt for needed information to use as variables below
$fullname = Read-Host "Enter Full Name"
$first = Read-Host "First name" 
$last = Read-Host "Last name"
$user = Read-Host "Username"
$title = Read-Host "Title"
Get-ADOrganizationalUnit -Filter * -Properties * -SearchBase "OU=Departments,OU=Users,OU=Test Enviorment,OU=New Zealand,OU=BNZ,DC=BNZTEST,DC=COM" |
    Select-Object -Property Name
$department = Read-Host "Enter department from above list"
$manager = Read-Host "Manager userame"
$srcuser = Read-Host "Username to copy"
Get-ADOrganizationalUnit -Filter * -Properties * -SearchBase "OU=Departments,OU=Users,OU=Test Enviorment,OU=New Zealand,OU=BNZ,DC=BNZTEST,DC=COM" |
    Select-Object -Property Name, DistinguishedName |
    Format-Table -Auto
$OU = Read-Host "Select OU from above list"

#Create a new user with the provided information and some static information
New-ADUser -Name "$fullname" -GivenName "$first" -Surname "$last" -DisplayName "$first $last" -Description "$title" -EmailAddress "$first.$last@bnztest.com" -SamAccountName "$user" -UserPrincipalName "$user@bnztest.com" -Manager "$manager" -Title "$title" -AccountPassword (Read-Host -AsSecureString "Please enter the desired password") -Enabled $true -Path $OU

#Add multiple ProxyAddresses if needed
Set-ADUser "$user" -Add @{ProxyAddresses="smtp:$first.$last@bnztest.com"}

#Copy group membership of the source user above
Get-ADUser -Identity "$srcuser" -Properties memberof |
    Select-Object -ExpandProperty memberof |
    Add-ADGroupMember -Members "$user" -PassThru |
    Select-Object -Property SamAccountName >$null
Write-Host 'CHECK AD REPLICATION BEFORE CONTINUING!'
pause

#Sync user to Office 365 using Dir Sync on a remote server
Import-Module ADSync
Start-ADSyncSyncCycle -PolicyType Initial
Start-Sleep -s 100

#License user in Office 365
$AdminName = "admin@testbnz.onmicrosoft.com"
$Pass = Get-Content "C:\Users\Administrator\Desktop\CreateUser\Cred.txt" |
        ConvertTo-SecureString
$Cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $AdminName, $Pass
Import-Module MSOnline
Connect-MsolService -Credential $cred
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $cred -Authentication Basic -AllowRedirection
Import-PSSession $Session
Start-Sleep -s 15
Set-MsolUser -UserPrincipalName "$user@bnztest.com" -UsageLocation 'US'
Set-MsolUserLicense -UserPrincipalName "$user@bnztest.com" -AddLicenses "TESTBNZ:O365_BUSINESS_PREMIUM"
Start-Sleep 90
Write-Host 'ENSURE THERE ARE NO ERRORS AND THAT THE MAILBOX HAS BEEN CREATED BEFORE CONTINUING!'
pause
Ansgar Wiechers
  • 193,178
  • 25
  • 254
  • 328
  • Basically, you want us to create a dictionary of all your OUs? – wp78de Nov 11 '17 at 06:18
  • He's already using `Get-ADOrganizationalUnit` to get the list OUs, it just needs to be used as the input to the 'choice' and presented to the helpdesk. – henrycarteruk Nov 11 '17 at 09:38

2 Answers2

3

You could add a simple menu like this:

$yes = New-Object System.Management.Automation.Host.ChoiceDescription "&Yes",
       "Exits the loop."    
$no = New-Object System.Management.Automation.Host.ChoiceDescription "&No",
      "Allows to add another user."

$options = [System.Management.Automation.Host.ChoiceDescription[]]($yes, $no)

do 
{ 
    $user = New-Object System.Management.Automation.Host.ChoiceDescription "&User", "User"
    $it = New-Object System.Management.Automation.Host.ChoiceDescription "&IT", "IT"
    $sales = New-Object System.Management.Automation.Host.ChoiceDescription "&Sales", "Sales"
    $OUoptions = [System.Management.Automation.Host.ChoiceDescription[]]($user, $it, $sales)
    $OU = $host.ui.PromptForChoice("Which OU", "Which OU", $OUoptions, 0) 

    switch ($OU) 
    { 
        0 {Write-Host "The choise is User."} 
        1 {Write-Host "IT"} 
        2 {Write-Host "Sales"} 
        default {Write-Host "The color could not be determined."}
    }

    $result = $host.ui.PromptForChoice("Continue?", "Do you want to add another user?", $options, 1)        
}
while ($result -eq 1)
Ansgar Wiechers
  • 193,178
  • 25
  • 254
  • 328
wp78de
  • 18,207
  • 7
  • 43
  • 71
2

You can use Out-GridView -OutputMode Single to present the helpdesk with a GUI to select from an object. eg:

enter image description here

$SearchBase = "OU=Departments,OU=Users,OU=Test Enviorment,OU=New Zealand,OU=BNZ,DC=BNZTEST,DC=COM"
$OUList = Get-ADOrganizationalUnit -SearchBase $SearchBase -Filter * -Properties Name,DistinguishedName | Select-Object -Property Name,DistinguishedName

$OU = $OUList | Out-GridView -Title "Select OU and Click OK" -OutputMode Single

Then you can use the OU with your New-ADUser command:

New-ADUser [...] -OU $OU.DistinguishedName
henrycarteruk
  • 12,708
  • 2
  • 36
  • 40