Created
September 12, 2016 12:46
-
-
Save DenisPitcher/d06c6cbc64765c1eb7e8c731964f2a5e to your computer and use it in GitHub Desktop.
Service Fabric .net 4.6 support
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#Requires -Version 3.0 | |
<# | |
.DESCRIPTION | |
Install .Net Framework 4.6.1 | |
Copied from https://www.azureserviceprofiler.com/content/downloads/InstallNetFx46.ps1 | |
#> | |
[CmdletBinding()] | |
Param( | |
[switch]$norestart | |
) | |
Set-StrictMode -Version Latest | |
$logFile = Join-Path $env:TEMP -ChildPath "InstallNetFx46ScriptLog.txt" | |
# Check if the latest NetFx46 version exists | |
$netFxKey = Get-ItemProperty -Path "HKLM:\SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full\\" -ErrorAction Ignore | |
if($netFxKey -and $netFxKey.Release -ge 394271) { | |
"$(Get-Date): The machine already has NetFx 4.6.1 or later version installed." | Tee-Object -FilePath $logFile -Append | |
exit 0 | |
} | |
# Download the latest NetFx46 | |
$setupFileSourceUri = "https://download.microsoft.com/download/3/5/9/35980F81-60F4-4DE3-88FC-8F962B97253B/NDP461-KB3102438-Web.exe" | |
$setupFileLocalPath = Join-Path $env:TEMP -ChildPath "NDP461-KB3102438-Web.exe" | |
"$(Get-Date): Start to download NetFx 4.6.1 to $setupFileLocalPath." | Tee-Object -FilePath $logFile -Append | |
if(Test-Path $setupFileLocalPath) | |
{ | |
Remove-Item -Path $setupFileLocalPath -Force | |
} | |
$webClient = New-Object System.Net.WebClient | |
$retry = 0 | |
do | |
{ | |
try { | |
$webClient.DownloadFile($setupFileSourceUri, $setupFileLocalPath) | |
break | |
} | |
catch [Net.WebException] { | |
$retry++ | |
if($retry -gt 3) { | |
"$(Get-Date): Download failed as the network connection issue. Exception detail: $_" | Tee-Object -FilePath $logFile -Append | |
break | |
} | |
$waitInSecond = $retry * 30 | |
"$(Get-Date): It looks the Internet network is not available now. Simply wait for $waitInSecond seconds and try again." | Tee-Object -FilePath $logFile -Append | |
Start-Sleep -Second $waitInSecond | |
} | |
} while ($true) | |
if(!(Test-Path $setupFileLocalPath)) | |
{ | |
"$(Get-Date): Failed to download NetFx 4.6.1 setup package." | Tee-Object -FilePath $logFile -Append | |
exit -1 | |
} | |
# Install NetFx46 | |
$setupLogFilePath = Join-Path $env:TEMP -ChildPath "NetFx46SetupLog.txt" | |
if($norestart) { | |
$arguments = "/q /norestart /serialdownload /log $setupLogFilePath" | |
} | |
else { | |
$arguments = "/q /serialdownload /log $setupLogFilePath" | |
} | |
"$(Get-Date): Start to install NetFx 4.6.1" | Tee-Object -FilePath $logFile -Append | |
$process = Start-Process -FilePath $setupFileLocalPath -ArgumentList $arguments -Wait -PassThru | |
if(-not $process) { | |
"$(Get-Date): Install NetFx failed." | Tee-Object -FilePath $logFile -Append | |
exit -1 | |
} | |
else { | |
$exitCode = $process.ExitCode | |
# 0, 1641 and 3010 indicate success. See https://msdn.microsoft.com/en-us/library/ee390831(v=vs.110).aspx for detail. | |
if($exitCode -eq 0 -or $exitCode -eq 1641 -or $exitCode -eq 3010) { | |
"$(Get-Date): Install NetFx succeeded with exit code : $exitCode." | Tee-Object -FilePath $logFile -Append | |
exit 0 | |
} | |
else { | |
"$(Get-Date): Install NetFx failed with exit code : $exitCode." | Tee-Object -FilePath $logFile -Append | |
exit -1 | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment