#
# Creates an utterly simple AD structure with groups, users and their profile images.
#
# This script was heavily based on:
#   https://github.com/kurobeats/Active-Directory-User-Script
#

Import-module activedirectory

$dnsDomain =gc env:USERDNSDOMAIN

$split = $dnsDomain.split(".")
$domain=$null
foreach($part in $split)
{
	if($domain -ne $null)
	{
		$domain+=","
	}
	$domain += "DC=$part"
}

#Declare any Variables
$dirpath = $pwd.path
$orgName = "Contoso"
$orgUnit = "OU=Groups,OU=$orgName"
$orgUnit2 = "OU=Users,OU=$orgName"
$counter = 0

$ImportFile = Import-csv "$dirpath\ADUsers.csv"
$TotalImports = $importFile.Count

New-ADOrganizationalUnit -Name $orgName -Path $domain
New-ADOrganizationalUnit -Name "Groups" -Path "OU=$orgName,$domain"
New-ADOrganizationalUnit -Name "Users" -Path "OU=$orgName,$domain"

$ImportFile | foreach {
	$counter++
	$progress = [int]($counter / $totalImports * 100)

	$pass = "Password$($counter)!"
    $ident = "CN=$($_.Name),$orgUnit2,$domain"
	$dummyPassword = ConvertTo-SecureString -AsPlainText $pass -Force

	if ($_.Manager -eq "") {
		New-ADUser -SamAccountName $_.SamAccountName -Name $_.Name -Surname $_.Sn -GivenName $_.GivenName -Path "$orgUnit2,$domain" -AccountPassword $dummyPassword -Enabled $true -title $_.title -officePhone $_.officePhone -department $_.department -emailaddress $_.mail
	} else {
        New-ADUser -SamAccountName $_.SamAccountName -Name $_.Name -Surname $_.Sn -GivenName $_.GivenName -Path "$orgUnit2,$domain" -AccountPassword $dummyPassword -Enabled $true -title $_.title -officePhone $_.officePhone -department $_.department -manager "$($_.Manager),$orgUnit2,$domain" -emailaddress $_.mail
	}
	Write-Host "$($_.Name) / $pass"
	If (gci "$dirpath\userimages\$($_.name).jpg") {
		$photo = [System.IO.File]::ReadAllBytes("$dirpath\userImages\$($_.name).jpg")
		Set-AdUser -Identity $ident -Replace @{thumbnailPhoto=$photo}
	}

	$san = $_.department -replace ' ', ''
	$dep = $_.department
	$group = (Get-ADGroup -Filter {Name -like $dep} -SearchBase "$orgUnit,$domain")
	if ($group -eq $null) {
		New-ADGroup -Name $_.department -SamAccountName $san -Path "$orgUnit,$domain" -GroupScope Global
        $group = (Get-ADGroup -Filter {Name -like $dep} -SearchBase "$orgUnit,$domain")
	}

    $user = Get-ADUser -Identity $ident
	Add-ADGroupMember -Identity $group -Members $user
}
