script/tools/public/Update-CbsPSModule.ps1
Function Update-CbsPSModule { [CmdletBinding(SupportsShouldProcess)] Param( [Parameter(Mandatory,ValueFromPipeline)][System.Management.Automation.PSModuleInfo]$Module ) # Get-Module -ListAvailable ` # | ? RepositorySourceLocation -match "www.powershellgallery.com" # | Group-Object Name ` # | % {$_.Group | Sort-Object Version | Select-Object -Last 1 } ` # | Update-CbsPSModule Begin { $ErrorActionPreference = "Stop" $pipeline = { # Invoke-CbsRunspace { try { $_ | Invoke-ProcessModule } catch { $_ | Write-Output } } Invoke-ProcessModule }.GetSteppablePipeline() $pipeline.Begin($true) } Process { if (!$PSCmdlet.ShouldProcess($Module)) { return } $pipeline.Process($Module) } End { $pipeline.End() } } Function Invoke-ProcessModule { Param( [Parameter(Mandatory,ValueFromPipeline)][System.Management.Automation.PSModuleInfo]$Module ) Process { Write-Host "Processing $($Module.Name):$($Module.Version)" $newModule = Find-Module -Name $Module.Name -ErrorAction SilentlyContinue if (!$newModule) { return } if ($newModule.Version -gt $Module.Version) { Update-Module -Name $Module.Name [PSCustomObject]@{ Name = $Module.Name OldVersion = $Module.Version NewVersion = $newModule.Version } } } } |