Provisioning Script Example

# File : User Sync Batch
# Version 1.0
# Date July 2018
# Requires GAM https://github.com/jay0lee/GAM/wiki

# Local Variables
$UserObjectArray=""
$Str_GAMUser=""
$Str_GAMDomain=""
$Str_UserDomain= ""
$StrGAMUpdate=""
$Str_GAMUserTargetOU=""
$GAMError=""

Write-Host "Log Event, Starting Processing" $(Get-Date)
Write-Host "---------------------------------------------------"

$UserObjectArray = & C:\GAM\gam.exe print users ou 2> out-null| ConvertFrom-Csv | Where-Object {$_.orgUnitPath -eq "/"}

If ($UserObjectArray -eq $null) {Write-Host "Log Event,Nothing to do - exiting," $(Get-Date);exit}
else {Write-Host "Log Event, Processing" $UserObjectArray.Count "Records" $(Get-Date) }

$UserObjectArray | ForEach-Object{
# Reset Variables on each loop
$Str_GAMUser=""
$Str_GAMDomain=""
$Str_GAMUserTargetOU=""


$Str_GAMUser = $_.primaryEmail

if ($_.primaryEmail.Contains("@"))
{
# Strip out the users domains
$Str_GAMDomain = Get_User_Domain $_.primaryEmail
}
else
{
Write-Host "Error,Badly Formatted Email Address for" $_.primaryEmail, $(Get-Date)
exit
}

# Map users domain to landing OU
$Str_GAMUserTargetOU = Get_User_OU($Str_GAMDomain.ToLower())

# Build String for Log
$StrGAMUpdate = "C:\GAM\gam.exe update OU " + '"' + $Str_GAMUserTargetOU + '"' + " add " + $Str_GAMUser 

Write-Host "---------------------------------------------------"
Write-Host "Log Event, Processing " $StrGAMUpdate,  $(Get-Date)

# Move user to landing OU
$GAMError = & C:\GAM\gam.exe update OU $Str_GAMUserTargetOU add $Str_GAMUser  2> out-null

#Loop
}



Function Get_User_OU () {
$OUPath="/Students/New Accounts"
switch ($args) {
"stfredsschool.org.uk" {$ret = "/St Freds Academy" + $OUPath}
"greyfriars.org.uk" {$ret = "/Greyfriars" + $OUPath}
# Add Schools as required.
default  {$ret = "/"}
  }
Return $ret




Function Get_User_Domain () {
$ret = $args.split("@")
Return $ret[1]


No comments:

Post a Comment