Private/Get-Prerequisite.ps1
function Get-Prerequisite { $modules = "CredentialManager","MicrosoftTeams","MSOnline","SharePointPnPPowerShellOnline" [System.Collections.ArrayList]$missingmodules = @() [System.Collections.ArrayList]$availablemodules = @() #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" }) { $availablemodules += "Microsoft Online Services Sign-in Assistant for IT Professionals RTW" } else { $missingmodules += "Microsoft Online Services Sign-in Assistant for IT Professionals RTW" } #SharePoint Online Management Shell if ((Get-ChildItem "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall") | Where-Object { $_.GetValue("DisplayName") -like "SharePoint Online Management Shell" }) { $availablemodules += "SharePoint Online Management Shell" } else { $missingmodules += "SharePoint Online Management Shell" } #Check modules foreach ($module in $modules) { if (Get-Module -ListAvailable -Name $module) { $availablemodules += $module } else { $missingmodules += $module } } #Check Azure AD if(Get-Module -ListAvailable -Name "AzureAD") { $availablemodules += "AzureAD" } elseif(Get-Module -ListAvailable -Name "AzureADPreview"){ $availablemodules += "AzureADPreview" } else { $missingmodules += "AzureAD" } Write-Host "Found required components:" -Fore Green $availablemodules | ForEach-Object{ Write-Host - "$_" -Fore Green} Write-Host "" Write-Host "Missing components:" -Fore Yellow $missingmodules | ForEach-Object{ Write-Host - "$_" -Fore Yellow} #If services is missing and modules if ($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 (Get-CurrentPrivilege -eq $true) { foreach ($module in $missingmodules) { Install-Component $module } Write-Host "" Write-Host "We had to install some modules that require PowerShell to restart." -Fore Yellow do{$value = read-host "Press `"Y`" to exit the console"} while($value -ne "Y") exit } else { Write-Host ("Please start PowerShell as administrator to install/update modules") -Fore Red; Write-Host ("The console will now exit so you can start it as an administrator") -Fore Red; WaitAnyKey; exit } } Clear-Host Get-Prerequisite } Clear-Host } function Get-CurrentPrivilege { $privilege = [bool](([System.Security.Principal.WindowsIdentity]::GetCurrent()).groups -match "S-1-5-32-544") #if($privilege -eq $false){Write-Host ("Please start PowerShell as administrator to install/update modules") -Fore Red;Write-Host ("The console will now exit so you can start it as an administrator") -Fore Red; WaitAnyKey; exit} return $privilege } function Get-SigninAssistant { if(Get-CurrentPrivilege -eq $true) { Write-Host("Downloading Microsoft Online Services Sign-in Assistant for IT Professionals RTW") -Fore Yellow $URL = "https://download.microsoft.com/download/7/1/E/71EF1D05-A42C-4A1F-8162-96494B5E615C/msoidcli_64bit.msi" $Filename = $URL.Split('/')[-1] Invoke-WebRequest -Uri $URL -UseBasicParsing -OutFile "$env:TEMP\$Filename" Write-Host("Installing Microsoft Online Services Sign-in Assistant for IT Professionals RTW") -Fore Yellow & $env:TEMP\$Filename /qn Write-Host("Microsoft Online Services Sign-in Assistant for IT Professionals RTW has been installed") -Fore Green Start-Sleep -Seconds 3 } else { Write-Host ("Please start PowerShell as administrator to install/update modules") -Fore Red Write-Host ("The console will now exit so you can start it as an administrator") -Fore Red WaitAnyKey exit } } function Get-SPOPowerShell { if(Get-CurrentPrivilege -eq $true) { Write-Host("Downloading SharePoint Online Management Shell") -Fore Yellow $URL = "https://download.microsoft.com/download/0/2/E/02E7E5BA-2190-44A8-B407-BC73CA0D6B87/SharePointOnlineManagementShell_8029-1200_x64_en-us.msi" $Filename = $URL.Split('/')[-1] Invoke-WebRequest -Uri $URL -UseBasicParsing -OutFile "$env:TEMP\$Filename" Write-Host("Installing SharePoint Online Management Shell") -Fore Yellow & $env:TEMP\$Filename /qn Write-Host("SharePoint Online Management Shell has been installed") -Fore Green Start-Sleep -Seconds 3 } else { Write-Host ("Please start PowerShell as administrator to install/update modules") -Fore Red Write-Host ("The console will now exit so you can start it as an administrator") -Fore Red WaitAnyKey exit } } function Install-Component($module) { switch($module) { "Microsoft Online Services Sign-in Assistant for IT Professionals RTW"{Get-SigninAssistant} "SharePoint Online Management Shell"{Get-SPOPowerShell} default{ Write-Host "Installing module $module" -Fore Yellow Install-Module $module -Force Write-Host "Installed module $module" -Fore Green } } } |