public/Update-PSModule.ps1
<# .Synopsis Update-PSModule function updates modules .DESCRIPTION The function updates PowerShell modules to the latest version. The function requires the custom object that it is return from Get-PSInstalledModule function. .EXAMPLE PS C:\> Get-PSInstalledModule | Uninstall-PSOlderModule -WhatIf -Verbose .EXAMPLE PS C:\> Get-PSInstalledModule | Uninstall-PSOlderModule -Force .EXAMPLE PS C:\> Get-PSInstalledModule -Name dbatools | Uninstall-PSOlderModule -Force .EXAMPLE PS C:\> Get-PSInstalledModule -Scope AllUsers | Update-PSModule -Force .EXAMPLE PS C:\> Get-PSInstalledModule -Name dba* -Scope AllUsers | Update-PSModule -Force .EXAMPLE PS C:\> Get-PSInstalledModule -Name dba* -Scope AllUsers | Update-PSModule -Force .EXAMPLE PS C:\> Get-PSInstalledModule | Out-GridView -OutputMode Multiple | Update-PSModule -Verbose .NOTES Author: Mateusz Nadobnik Link: akademiapowershell.pl Date: 15-04-2020 Version: 0.0.1 Keywords: remove, uninstall, module Notes: Changelog: #> #Requires -RunAsAdministrator function Update-PSModule { [cmdletbinding(SupportsShouldProcess = $true)] param( [Parameter(ValueFromPipeline, ParameterSetName = 'InputObject')] [PSTypeName('ModuleManagerList')]$InputObject, # Forces an update of each specified module without a prompt to request confirmation. If the module is already installed, Force reinstalls the module. [switch]$Force = $false ) begin { $IsForce = if ($Force.IsPresent) { $true } } process { foreach ($Item in $InputObject) { $Name = $Item.Name $Scope = $Item.Scope if ($Scope -eq 'System') { Write-Warning "Update the module of scope 'System' is not supported" return } Write-Verbose "Find the new version '$Name' module and install to '$Scope' scope" $NewVersionModule = Find-Module -Name $Name if ($null -ne $NewVersionModule) { if ($PSCmdlet.ShouldProcess("Version '$($NewVersionModule.Version)' of module '$($NewVersionModule.Name)'")) { $NewVersionModule | Update-Module -Scope $Scope -Force:$IsForce } } } } } |