Private/Get-Prerequisite.ps1

function Get-Prerequisite
{
    $modules = "CredentialManager","AzureAD","MicrosoftTeams","MSOnline","SharePointPnPPowerShellOnline","Microsoft.Online.SharePoint.PowerShell","SkypeOnlineConnector"
    $missingmodules = @()
    [boolean]$state = 1

    #Check modules
    foreach ($module in $modules)
    {
        if (Get-Module -ListAvailable -Name $module)
        {
            Write-Host ("Module $module found") -Fore Green
        }
        else
        {
            Write-Host ("Module $module missing") -Fore Red
            $missingmodules += $module
        }
    }

    #Microsoft Online Services Sign-in Assistant for IT Professionals RTW
    if ((Get-ChildItem "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall") | Where-Object { $_.GetValue("DisplayName") -like "Microsoft Online Services Sign-in Assistant" })
    {
        Write-Host ("Microsoft Online Services Sign-in Assistant for IT Professionals RTW found") -Fore Green
    }
    else
    {
        Write-Host ("Microsoft Online Services Sign-in Assistant for IT Professionals RTW missing, please download here:") -Fore Red
        Write-Host ("https://www.microsoft.com/en-us/download/details.aspx?id=28177") -Fore Yellow
        $state = 0
    }

    #If services is missing and modules
    if ($state -eq 0 -and $missingmodules.count -eq 0)
    {
        Write-Host ("")
        Write-Host ("") -Fore red
        WaitAnyKey
        exit
    }
    elseif ($missingmodules.count -ge 1)
    {
        $title = "Install missing modules?"
        $message = "Do you want to install missing modules now?"
        $yes = New-Object System.Management.Automation.Host.ChoiceDescription "&Yes"
        $no = New-Object System.Management.Automation.Host.ChoiceDescription "&No"
        $options = [System.Management.Automation.Host.ChoiceDescription[]]($yes,$no)
        $choice = $host.UI.PromptForChoice($title,$message,$options,1)

        if ($choice -eq 0)
        {
            if ([bool](([System.Security.Principal.WindowsIdentity]::GetCurrent()).groups -match "S-1-5-32-544"))
            {
                Write-Host ("Current instance is running as administrator") -Fore Green

                foreach ($module in $missingmodules)
                {
                    Write-Host ("Installing module $module") -Fore Yellow
                    Install-Module $module
                }
            }
            else {
                Write-Host ("Please start PowerShell as administrator to install modules") -Fore Red
                WaitAnyKey
                exit
            }
        }
        Clear-Host
        Get-Prerequisite
    }
    Clear-Host
}