[CmdletBinding()]
param(

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

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

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

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

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

    [Parameter(Mandatory=$false)]
    [string]$WSFCNode3NetBIOSName=$null

)
$success = $false
For ($i=0; $i -le 4; $i++) {
    if ($success -eq $true) {
        Break
    }

    try {
        Start-Transcript -Path C:\cfn\log\Enable-SqlAlwaysOn.ps1.txt -Append
        $ErrorActionPreference = "Stop"

        $DomainAdminFullUser = $DomainNetBIOSName + '\' + $DomainAdminUser
        $DomainAdminSecurePassword = ConvertTo-SecureString $DomainAdminPassword -AsPlainText -Force
        $DomainAdminCreds = New-Object System.Management.Automation.PSCredential($DomainAdminFullUser, $DomainAdminSecurePassword)

        $EnableAlwaysOnPs={
            $ErrorActionPreference = "Stop"
            Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned
            Enable-SqlAlwaysOn -ServerInstance $Using:serverInstance -Force
        }

        $serverInstance = $WSFCNode1NetBIOSName
        Invoke-Command -Scriptblock $EnableAlwaysOnPs -ComputerName $WSFCNode1NetBIOSName -Credential $DomainAdminCreds
        $serverInstance = $WSFCNode2NetBIOSName
        Invoke-Command -Scriptblock $EnableAlwaysOnPs -ComputerName $WSFCNode2NetBIOSName -Credential $DomainAdminCreds
        if ($WSFCNode3NetBIOSName) {
            $serverInstance = $WSFCNode3NetBIOSName
            Invoke-Command -Scriptblock $EnableAlwaysOnPs -ComputerName $WSFCNode3NetBIOSName -Credential $DomainAdminCreds
        }

        $success = $true

    }
    catch {
        if ($i -eq 3) {
            $_ | Write-AWSQuickStartException
        }
        else {
            $success = $false
        }
    }

    Start-Sleep -s 300
}