Skip to content

Instantly share code, notes, and snippets.

@pldmgg
Last active January 24, 2019 02:30
Show Gist options
  • Save pldmgg/b8db54742d511bd7d8d5742d539ebbe1 to your computer and use it in GitHub Desktop.
Save pldmgg/b8db54742d511bd7d8d5742d539ebbe1 to your computer and use it in GitHub Desktop.
Update-PackageManagement_PowerShellCore_Errors
function Check-Elevation {
if ($PSVersionTable.PSEdition -eq "Desktop" -or $PSVersionTable.Platform -eq "Win32NT") {
[System.Security.Principal.WindowsPrincipal]$currentPrincipal = New-Object System.Security.Principal.WindowsPrincipal(
[System.Security.Principal.WindowsIdentity]::GetCurrent()
)
[System.Security.Principal.WindowsBuiltInRole]$administratorsRole = [System.Security.Principal.WindowsBuiltInRole]::Administrator
if($currentPrincipal.IsInRole($administratorsRole)) {
return $true
}
else {
return $false
}
}
if ($PSVersionTable.Platform -eq "Unix") {
if ($(whoami) -eq "root") {
return $true
}
else {
return $false
}
}
}
$PackageManagementLatestLocallyAvailableVersion = $($(Get-Module -ListAvailable | Where-Object {$_.Name -eq "PackageManagement"}).Version | Measure-Object -Maximum).Maximum
$PowerShellGetLatestLocallyAvailableVersion = $($(Get-Module -ListAvailable | Where-Object {$_.Name -eq "PowerShellGet"}).Version | Measure-Object -Maximum).Maximum
# Update PackageManagement and PowerShellGet if they're not the latest
[version]$MinimumVer = "1.0.0.1"
$PackageManagementLatestVersion = $(Find-Module PackageManagement).Version
$PowerShellGetLatestVersion = $(Find-Module PowerShellGet).Version
Write-Host "PackageManagement Latest Version is: $PackageManagementLatestVersion"
Write-Host "PowerShellGetLatestVersion Latest Version is: $PowerShellGetLatestVersion"
if ($PackageManagementLatestVersion -gt $PackageManagementLatestLocallyAvailableVersion -and $PackageManagementLatestVersion -gt $MinimumVer) {
if ($PSVersionTable.PSVersion.Major -lt 5) {
Write-Host "`nUnable to update the PackageManagement Module beyond $($MinimumVer.ToString()) on PowerShell versions lower than 5."
}
if ($PSVersionTable.PSVersion.Major -ge 5) {
#Install-Module -Name "PackageManagement" -Scope CurrentUser -Repository PSGallery -RequiredVersion $PackageManagementLatestVersion -Force
if (Check-Elevation) {
Write-Host "Installing latest version of PackageManagement..."
Install-Module -Name "PackageManagement" -Force
}
else {
Write-Error "Please run the Update-PackageManagement function in an elevated PowerShell Session. Halting!"
$global:FunctionResult = "1"
return
}
}
}
if ($PowerShellGetLatestVersion -gt $PowerShellGetLatestLocallyAvailableVersion -and $PowerShellGetLatestVersion -gt $MinimumVer) {
# Unless the force parameter is used, Install-Module will halt with a warning saying the 1.0.0.1 is already installed
# and it will not update it.
#Install-Module -Name "PowerShellGet" -Scope CurrentUser -Repository PSGallery -RequiredVersion $PowerShellGetLatestVersion -Force -WarningAction "SilentlyContinue"
Write-Host "Installing latest version of PowerShellGet..."
if (Check-Elevation) {
#Install-Module -Name "PowerShellGet" -RequiredVersion $PowerShellGetLatestVersion -Force
Install-Module -Name "PowerShellGet" -Force
}
else {
Write-Error "Please run the Update-PackageManagement function in an elevated PowerShell Session. Halting!"
$global:FunctionResult = "1"
return
}
}
# Reset the LatestLocallyAvailableVersion variables to reflect latest available, and then load them into the current session
$PackageManagementLatestLocallyAvailableVersion = $($(Get-Module -ListAvailable | Where-Object {$_.Name -eq "PackageManagement"}).Version | Measure-Object -Maximum).Maximum
$PowerShellGetLatestLocallyAvailableVersion = $($(Get-Module -ListAvailable | Where-Object {$_.Name -eq "PowerShellGet"}).Version | Measure-Object -Maximum).Maximum
$CurrentlyLoadedPackageManagementVersion = $(Get-Module | Where-Object {$_.Name -eq 'PackageManagement'}).Version
$CurrentlyLoadedPowerShellGetVersion = $(Get-Module | Where-Object {$_.Name -eq 'PowerShellGet'}).Version
Write-Host "Currently loaded PackageManagement version is $CurrentlyLoadedPackageManagementVersion"
Write-Host "Currently loaded PowerShellGet version is $CurrentlyLoadedPowerShellGetVersion"
if ($CurrentlyLoadedPackageManagementVersion -lt $PackageManagementLatestLocallyAvailableVersion) {
# Need to remove PowerShellGet first since it depends on PackageManagement
Write-Host "Removing Module PowerShellGet $CurrentlyLoadedPowerShellGetVersion ..."
Remove-Module -Name "PowerShellGet"
Write-Host "Removing Module PackageManagement $CurrentlyLoadedPackageManagementVersion ..."
Remove-Module -Name "PackageManagement"
if ($(Get-Host).Name -ne "Package Manager Host") {
Write-Host "We are NOT in the Visual Studio Package Management Console. Continuing..."
# Need to Import PackageManagement first since it's a dependency for PowerShellGet
Write-Host "Importing PackageManagement Version $PackageManagementLatestLocallyAvailableVersion ..."
Import-Module "PackageManagement" -RequiredVersion $PackageManagementLatestLocallyAvailableVersion
Write-Host "Importing PowerShellGet Version $PowerShellGetLatestLocallyAvailableVersion ..."
Import-Module "PowerShellGet" -RequiredVersion $PowerShellGetLatestLocallyAvailableVersion
}
if ($(Get-Host).Name -eq "Package Manager Host") {
Write-Host "We ARE in the Visual Studio Package Management Console. Continuing..."
# Need to Import PackageManagement first since it's a dependency for PowerShellGet
Write-Host "Importing PackageManagement Version $PackageManagementLatestLocallyAvailableVersion`nNOTE: Module Members will have with Prefix 'PackMan' - Example: Get-PackManPackage"
Import-Module "PackageManagement" -RequiredVersion $PackageManagementLatestLocallyAvailableVersion -Prefix PackMan
Write-Host "Importing PowerShellGet Version $PowerShellGetLatestLocallyAvailableVersion`nNOTE: Module Members will have with Prefix 'PSGet' - Example: Find-PSGetModule"
Import-Module "PowerShellGet" -RequiredVersion $PowerShellGetLatestLocallyAvailableVersion -Prefix PSGet
}
}
# Reset CurrentlyLoaded Variables
$CurrentlyLoadedPackageManagementVersion = $(Get-Module | Where-Object {$_.Name -eq 'PackageManagement'}).Version
$CurrentlyLoadedPowerShellGetVersion = $(Get-Module | Where-Object {$_.Name -eq 'PowerShellGet'}).Version
Write-Host "Currently loaded PackageManagement version is $CurrentlyLoadedPackageManagementVersion"
Write-Host "Currently loaded PowerShellGet version is $CurrentlyLoadedPowerShellGetVersion"
if ($CurrentlyLoadedPowerShellGetVersion -lt $PowerShellGetLatestLocallyAvailableVersion) {
Write-Host "Removing Module PowerShellGet $CurrentlyLoadedPowerShellGetVersion ..."
Remove-Module -Name "PowerShellGet"
if ($(Get-Host).Name -ne "Package Manager Host") {
Write-Host "We are NOT in the Visual Studio Package Management Console. Continuing..."
Write-Host "Importing PowerShellGet Version $PowerShellGetLatestLocallyAvailableVersion ..."
Import-Module "PowerShellGet" -RequiredVersion $PowerShellGetLatestLocallyAvailableVersion
}
if ($(Get-Host).Name -eq "Package Manager Host") {
Write-Host "We ARE in the Visual Studio Package Management Console. Continuing..."
Write-Host "Importing PowerShellGet Version $PowerShellGetLatestLocallyAvailableVersion`nNOTE: Module Members will have with Prefix 'PSGet' - Example: Find-PSGetModule"
Import-Module "PowerShellGet" -RequiredVersion $PowerShellGetLatestLocallyAvailableVersion -Prefix PSGet
}
}
# Make sure all Repos Are Trusted
if ($PSVersionTable.PSEdition -eq "Desktop" -or $PSVersionTable.Platform -eq "Win32NT") {
$BaselineRepoNames = @("Chocolatey","nuget.org","PSGallery")
}
if ($PSVersionTable.Platform -eq "Unix") {
$BaselineRepoNames = @("nuget.org","PSGallery")
}
$RepoObjectsForTrustCheck = Get-PackageSource | Where-Object {$_.Name -match "$($BaselineRepoNames -join "|")"}
foreach ($RepoObject in $RepoObjectsForTrustCheck) {
if ($RepoObject.IsTrusted -ne $true) {
Set-PackageSource -Name $RepoObject.Name -Trusted
}
}
PS C:\Users\zeroadmin> C:\Scripts\powershell\Sanitized-UpdatePackageManagement.ps1
PackageManagement Latest Version is: 1.1.6.0
PowerShellGetLatestVersion Latest Version is: 1.1.3.2
Installing latest version of PackageManagement...
Currently loaded PackageManagement version is 1.1.4.0
Currently loaded PowerShellGet version is 1.1.3.2
Removing Module PowerShellGet 1.1.3.2 ...
Removing Module PackageManagement 1.1.4.0 ...
We are NOT in the Visual Studio Package Management Console. Continuing...
Importing PackageManagement Version 1.1.6.0 ...
Import-Module : Assembly with same name is already loaded
At C:\program files\powershell\6.0.0-beta.6\Modules\PackageManagement\1.1.6.0\PackageManagement.psm1:45 char:17
+ $OneGetModule = Import-Module -Name $OneGetModulePath -PassThru
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Import-Module], FileLoadException
+ FullyQualifiedErrorId : System.IO.FileLoadException,Microsoft.PowerShell.Commands.ImportModuleCommand
Import-Module : Assembly with same name is already loaded
At C:\program files\powershell\6.0.0-beta.6\Modules\PackageManagement\1.1.6.0\PackageManagement.psm1:46 char:19
+ $PSOneGetModule = Import-Module -Name $PSOneGetModulePath -PassThru
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Import-Module], FileLoadException
+ FullyQualifiedErrorId : System.IO.FileLoadException,Microsoft.PowerShell.Commands.ImportModuleCommand
The variable '$OneGetModule' cannot be retrieved because it has not been set.
At C:\program files\powershell\6.0.0-beta.6\Modules\PackageManagement\1.1.6.0\PackageManagement.psm1:50 char:4
+ if($OneGetModule)
+ ~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (OneGetModule:String) [], RuntimeException
+ FullyQualifiedErrorId : VariableIsUndefined
The variable '$PSOneGetModule' cannot be retrieved because it has not been set.
At C:\program files\powershell\6.0.0-beta.6\Modules\PackageManagement\1.1.6.0\PackageManagement.psm1:57 char:4
+ if($PSOneGetModule)
+ ~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (PSOneGetModule:String) [], RuntimeException
+ FullyQualifiedErrorId : VariableIsUndefined
Importing PowerShellGet Version 1.1.3.2 ...
Currently loaded PackageManagement version is 1.1.6.0
Currently loaded PowerShellGet version is 1.1.3.2
Get-PackageSource : The term 'Get-PackageSource' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of
the name, or if a path was included, verify that the path is correct and try again.
At C:\Scripts\powershell\Sanitized-UpdatePackageManagement.ps1:140 char:29
+ $RepoObjectsForTrustCheck = Get-PackageSource | Where-Object {$_.Name ...
+ ~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Get-PackageSource:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment