Upgradepwsh.ps1
#requires -RunAsAdministrator <#PSScriptInfo .VERSION 1.0.2 .GUID 48fcb5e2-0e6a-4a93-9699-f44fc7156482 .AUTHOR kvprasoon .COMPANYNAME PSBUG .COPYRIGHT kvprasoon .TAGS pwsh powershell upgrade .LICENSEURI .PROJECTURI https://github.com/kvprasoon/PwshUtils/blob/master/Utilities/UpdatePwsh.ps1 .ICONURI .EXTERNALMODULEDEPENDENCIES .REQUIREDSCRIPTS .EXTERNALSCRIPTDEPENDENCIES .RELEASENOTES 7/21/2018 Added -Prerelease switch which option of installing Release or pre release version. 7/20/2018 Upgrade pwsh script support is currently available only for below Operating Systems. - Windows #> <# .DESCRIPTION Script to upgrade pwsh to the latest available release(Only for windows now) .EXAMPLE .\UpgarePwsh.ps1 The above command will install the latest released version of PowerShell core. .EXAMPLE .\UpgarePwsh.ps1 -PreRelease The above command will install the latest pre release version of PowerShell core. #> Param( # Use -PreRelease switch to install pre release version of PowerShell core. [Parameter()] [switch]$Prerelease ) function InstallForWindows{ Param( $Release ) $OutputPath = "$env:HOMEPATH\Downloads" if( [Environment]::Is64BitOperatingSystem ){ $FilterCriteria = { ($_.Name -match '.msi') -and ($_.Name -match "x64") } } else{ $FilterCriteria = { ($_.Name -match '.msi') -and ($_.Name -match "x86") } } Write-Host "Latest released packages are below" $RequiredPackage = $Release | Where-Object $FilterCriteria $DownloadPath = "$OutputPath\$($RequiredPackage.Name)" Write-Host "Downloading latest release $($RequiredPackage.Name) " Invoke-WebRequest $RequiredPackage.Browser_Download_Url -Out "$DownloadPath" -ErrorAction Stop Write-Host "Installing $($RequiredPackage.Name)" @" msiexec /i $DownloadPath /quiet start pwsh "@ | Out-File -FilePath $env:Temp\UpdatePwsh.bat Start-Process -FilePath $env:Temp\UpdatePwsh.bat -ErrorAction Stop Write-Host -ForegroundColor Green "Have fun using Pwsh ..." } try{ $Script:pwsh = 'pwsh' $ReleaseUrl = "https://api.github.com/repos/PowerShell/PowerShell/releases" $MetadataUrl = "https://raw.githubusercontent.com/PowerShell/PowerShell/master/tools/metadata.json" $CurrentVersion = $PSVersionTable.PSVersion -as [string] Write-Host "Installed pwsh version is $CurrentVersion" Write-Host "Fetching latest releases" $ReleaseMetadata = Invoke-RestMethod -Uri $MetadataUrl -ErrorAction Stop If( $PreRelease.IsPresent ){ $ReleseToDownload = $ReleaseMetadata.NextReleaseTag } else{ $ReleseToDownload = $ReleaseMetadata.ReleaseTag } $Releases = Invoke-RestMethod -Uri $ReleaseUrl $LatestRelease = ($Releases | Where-Object -FilterScript { $_.Tag_Name -eq $ReleseToDownload }).assets | Select-Object -Property Name,Browser_Download_Url -ErrorAction Stop If( $LatestRelease.Name -like "*$CurrentVersion*" ){ Write-Host "Currenlty executing pwsh is with latest available version" } else{ InstallForWindows -Release $LatestRelease Stop-Process -Name pwsh -Force -ErrorAction Stop } } Catch{ Throw "pwsh update failed due to $_" } |