Public/Test-P1Prerequisites.ps1

function Test-P1Prerequisites {
    <#
    .Synopsis
    Test if prerequisites of PlannerOne are installed on the machine.
 
    .Description
    Look for a list a features that must be installed.
    Use Install parameter to force installation of missing features.
 
    .Parameter Install
    Force installation of missing features.
 
    .Example
    # Test prerequisites and install missing features.
    Test-P1Prerequisites -Install
    #>

    [cmdletbinding()]
    param (
        [switch] $Install = $false
    )
    Process
    {
        Import-Module servermanager

        $features = ('Web-Server', 'Web-Mgmt-Console', 'Web-Request-Monitor', 'Web-Windows-Auth', 'Web-Asp-Net45', 'Web-Net-Ext45', 'Web-ISAPI-Filter', 'Web-ISAPI-Ext', 'NET-WCF-HTTP-Activation45', 'NET-Framework-45-ASPNET')
        $missing = @()

        foreach ($featureName in $features) {
            # check whether the featue is installed
            $feature = Get-WindowsFeature $featureName

            $message = $feature.DisplayName + " : " + $feature.InstallState
            
            switch ($feature.InstallState) {
                UninstallPending
                    { Write-Output $message; $missing += $featureName }
                Available
                    { Write-Output $message; $missing += $featureName }
                Default
                    { Write-Output $message }
            }
        }

        Write-Output ''

        if ($missing.Count -eq 0) {
            Write-Output 'No missing features! Ready for PlannerOne!'
        } else {
            Write-Output 'Missing features: ' $missing

            if ($Install) {
                Write-Output ''
                Write-Output 'Installing missing features'

                foreach ($featureName in $missing) {
                    # check whether the featue is installed
                    $feature = Get-WindowsFeature $featureName
                    Add-WindowsFeature $featureName
                }
            }
        }
    }
}