[CmdletBinding()]
param(
    [Parameter(Mandatory=$true)]
    [string]$DomainAdminUser,

    [Parameter(Mandatory=$true)]
    [string]$Server,

    [Parameter(Mandatory=$true)]
    [string]$DomainDNSName,

    [Parameter(Mandatory=$true)]
    [string]$SSMParamName
) 

$timeoutInSeconds = 600
$elapsedSeconds = 0
$intervalSeconds = 1
$startTime = Get-Date
$running = $false

try {
    $ErrorActionPreference = "Stop"
    Start-Transcript -Path C:\cfn\log\$($MyInvocation.MyCommand.Name).log -Append

    While (($elapsedSeconds -lt $timeoutInSeconds )) {
        try {
            $adws = Get-Process -Name Microsoft.ActiveDirectory.WebServices
            if ($adws) {
                $DomainAdminPassword = (Get-SSMParameterValue -Names $SSMParamName).Parameters[0].Value
                Write-SSMParameter -Name $SSMParamName -Type SecureString -Value $DomainAdminPassword -Overwrite $true
                $Admin = $DomainAdminUser+"@"+$DomainDNSName
                New-ADUser -Name $DomainAdminUser -UserPrincipalName $Admin -AccountPassword (ConvertTo-SecureString $DomainAdminPassword  -AsPlainText -Force) -Enabled $true -PasswordNeverExpires $true -Server $Server
                echo "Successfully Created the Admin User..."
                break
            }           
        }
        catch {
            Start-Sleep -Seconds $intervalSeconds
            $elapsedSeconds = ($(Get-Date) - $startTime).TotalSeconds
            echo "Elapse Seconds" $elapsedSeconds 
            
        }
        if ($elapsedSeconds -ge $timeoutInSeconds) {
            Throw "ADWS did not start or is unreachable in $timeoutInSeconds seconds..."
        }
    }

}
catch {
    $_ | Write-AWSQuickStartException
}