# # Prerequisite.ps1 # # If debugging is not working open PowerShell.exe and paste the command "Set-ExecutionPolicy Bypass -Scope Process" # To remove execution policy: paste in PowerShell the command "Set-ExecutionPolicy Undefined -Scope Process" function Get-Installed-Framework-Detail-Versions() { Write-Host "" Get-ChildItem ‘HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP’ -Recurse | Get-ItemProperty -Name version -EA 0 | Where { $_.PSChildName -Match ‘^(?!S)\p{L}’} | Select PSChildName, version Write-Host "" } function Get-Installed-Framework-Versions() { $installedFrameworks = @() if (Is-Key-Present "HKLM:\Software\Microsoft\.NETFramework\Policy\v1.0" "3705") { $installedFrameworks += "Installed .Net Framework 1.0" } if (Is-Key-Present "HKLM:\Software\Microsoft\NET Framework Setup\NDP\v1.1.4322" "Install") { $installedFrameworks += "Installed .Net Framework 1.1" } if (Is-Key-Present "HKLM:\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727" "Install") { $installedFrameworks += "Installed .Net Framework 2.0" } if (Is-Key-Present "HKLM:\Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup" "InstallSuccess") { $installedFrameworks += "Installed .Net Framework 3.0" } if (Is-Key-Present "HKLM:\Software\Microsoft\NET Framework Setup\NDP\v3.5" "Install") { $installedFrameworks += "Installed .Net Framework 3.5" } if (Is-Key-Present "HKLM:\Software\Microsoft\NET Framework Setup\NDP\v4\Client" "Install") { $installedFrameworks += "Installed .Net Framework 4.0c" } if (Is-Key-Present "HKLM:\Software\Microsoft\NET Framework Setup\NDP\v4\Full" "Install") { $installedFrameworks += "Installed .Net Framework 4.0" } Write-Host "" return $installedFrameworks } function Get-Framework-Versions-And-Handle-Operation() { $version = Get-Framework40-Family-Version; if ($version -ge 1) { #.NET Framework installed } else { Download-And-Install-Framework } } function Get-Framework40-Family-Version() { $result = -1 if (Is-Key-Present "HKLM:\Software\Microsoft\NET Framework Setup\NDP\v4\Client" "Install" -or Is-Key-Present "HKLM:\Software\Microsoft\NET Framework Setup\NDP\v4\Full" "Install") { # .net 4.0 is installed $result = 0 $version = Get-Framework-Value "HKLM:\Software\Microsoft\NET Framework Setup\NDP\v4\Full" "Release" if ($version -ge 528040) { # .net 4.8 Write-Host "Installed .Net Framework 4.8 or greater" -foregroundcolor Green $result = 10 } elseif ($version -ge 461808 -Or $version -ge 461814) { # .net 4.7.2 Write-Host "Installed .Net Framework 4.7.2" -foregroundcolor Green $result = 9 } elseif ($version -ge 461308 -Or $version -ge 461310) { # .net 4.7.1 Write-Host "Installed .Net Framework 4.7.1" -foregroundcolor Green $result = 8 } elseif ($version -ge 460798 -Or $version -ge 460805) { # .net 4.7 Write-Host "Installed .Net Framework 4.7" -foregroundcolor Green $result = 7 } elseif ($version -ge 394802 -Or $version -ge 394806) { # .net 4.6.2 Write-Host "Installed .Net Framework 4.6.2" -foregroundcolor Green $result = 6 } elseif ($version -ge 394254 -Or $version -ge 394271) { # .net 4.6.1 Write-Host "Installed .Net Framework 4.6.1" -foregroundcolor Green $result = 5 } elseif ($version -ge 393295 -Or $version -ge 393297) { # .net 4.6 Write-Host "Installed .Net Framework 4.6" -foregroundcolor Green $result = 4 } elseif ($version -ge 379893) { # .net 4.5.2 Write-Host "Installed .Net Framework 4.5.2" -foregroundcolor Green $result = 3 } elseif ($version -ge 378675) { # .net 4.5.1 Write-Host "Installed .Net Framework 4.5.1" -foregroundcolor Green $result = 2 } elseif ($version -ge 378389) { # .net 4.5 Write-Host "Installed .Net Framework 4.5" -foregroundcolor Green $result = 1 } } else { # .net framework 4 family isn't installed $result = -1 } return $result } # .Net Frameworks possible to download here: https://dotnet.microsoft.com/en-us/download/dotnet-framework function Download-And-Install-Framework() { $url = "https://download.visualstudio.microsoft.com/download/pr/014120d7-d689-4305-befd-3cb711108212/0fd66638cde16859462a6243a4629a50/ndp48-x86-x64-allos-enu.exe" $output = "$PSScriptRoot\NetFrameworkInstaller_4_8.exe" $yes = New-Object System.Management.Automation.Host.ChoiceDescription "&Yes","Description." $no = New-Object System.Management.Automation.Host.ChoiceDescription "&No","Description." $options = [System.Management.Automation.Host.ChoiceDescription[]]($yes, $no) $title = ".Net Framework 4.8 is not installed" $message = "Download and Install .Net Framework 4.8?" $result = $host.ui.PromptForChoice($title, $message, $options, 1) switch ($result) { 0 { $start_time = Get-Date Write-Host "" Write-Host "Downloading .Net Framework 4.8" -foregroundcolor Cyan Invoke-WebRequest -Uri $url -OutFile $output Write-Output "Time taken: $((Get-Date).Subtract($start_time).Seconds) second(s)" Write-Host "" Write-Host "Installing .Net Framework 4.8" -foregroundcolor Cyan Start-Process $PSScriptRoot\NetFrameworkInstaller_4_8.exe -Wait } 1 { Write-Host "" Write-Host "The Web or Offline installer Runtime .Net Framework 4.8 can be downloaded from:" -foregroundcolor Cyan Write-Host "https://dotnet.microsoft.com/en-us/download/dotnet-framework/net48" } } } function Is-Key-Present([string]$path, [string]$key) { if (!(Test-Path $path)) { return $false } if ((Get-ItemProperty $path).$key -eq $null) { return $false } return $true } function Get-Framework-Value([string]$path, [string]$key) { if (!(Test-Path $path)) { return "-1" } return (Get-ItemProperty $path).$key } try { #Write-Host "" #Write-Host "Computer Information" -foregroundcolor Green #$data = 'windows*','OsVersion', 'OsLocale', 'OsLocalDateTime', 'OsLastBootUpTime', 'OsArchitecture', 'OsLanguage', 'OsLanguage', 'OsProductType', 'OsInstallDate' #Get-ComputerInfo -Property $data Write-Host "Installed .NET Frameworks" -foregroundcolor Green # print all installed net frameworks Get-Installed-Framework-Versions # in case .net framework family 4 is present in system, script start application otherwise # download and install predefined framework Get-Framework-Versions-And-Handle-Operation Write-Host "" Write-Host "" Read-Host -Prompt "Press any key to exit" } catch { Write-Error $_.Exception.ToString() Read-Host -Prompt "Error. Press Enter to exit" }