public/Update-AWSWindowsHelperAMI.ps1

function Update-AWSWindowsHelperAMI{
    Param(
        [Parameter(Mandatory=$true)]
        $Region,
        [Parameter(Mandatory=$true)]
        $InstanceID
    )
    
    $UserData = {
        $TaskName = "AMI Windows Patching"
        try{
            $STPrin = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount
            $STTri1 = New-ScheduledTaskTrigger -AtStartup
            $STTri2 = New-ScheduledTaskTrigger -Once -At $(Get-Date) -RepetitionInterval "00:01:00" -RepetitionDuration $([TimeSpan]::MaxValue)
            $STAct = New-ScheduledTaskAction -Execute "PowerShell.exe" `
                -Argument $('-executionpolicy Bypass -NonInteractive -c "powershell -executionpolicy Bypass -NonInteractive -c '+$($MyInvocation.MyCommand.Definition)+' -verbose >> C:\PatchingScheduledTask.log 2>&1"')
            Register-ScheduledTask -Principal $STPrin -Trigger @($STTri1,$STTri2) -TaskName $TaskName -Action $STAct
        }catch{
            Write-Error $_.exception.message
        }

        # Install PSWindowsUpdate using Chocolatey
        Set-ExecutionPolicy Unrestricted -Force
        iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) 
        choco source add -n=chocolatey -s="https://chocolatey.org/api/v2/" -y
        choco install pswindowsupdate -y
        
        if(Get-WUList){
            Write-Host "Updates required, installing"
            Get-WUInstall -AcceptAll -AutoReboot | Out-File C:\PSWindowsUpdate.log
        }else{
            Get-ScheduledTask -TaskName $TaskName | Unregister-ScheduledTask -Confirm:$false
            Write-Host "No updates needed, stopping computer"
            Stop-Computer -Force
        }
    }

    Send-SSMCommand -DocumentName "AWS-RunPowerShellScript" -Parameter @{commands=[string]$UserData} -InstanceId $InstanceID -Region $Region

    Write-Verbose "Executed SSM command to update Windows instance and shutdown upon completion"
}