Public/Update-Office365Modules.ps1
|
function Update-Office365Modules { param ( [switch]$AllowPrerelease ) $local:Functions= Get-Office365ModuleInfo if ($PSBoundParameters.ContainsKey('AllowPrerelease')) { $script:myOffice365Services['AllowPrerelease'] = $AllowPrerelease.IsPresent } $local:IsAdmin= [System.Security.principal.windowsprincipal]::new([System.Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator) If( $local:IsAdmin) { If( (Get-Process -Name powershell, pwsh -ErrorAction SilentlyContinue | Measure-Object).Count -gt 1) { Write-Warning ('Running multiple PowerShell sessions, successful updating might be problematic.') } ForEach ( $local:Item in $local:Functions) { $local:Module= Get-myModule -Name ('{0}' -f $local:Item.Module) | Sort-Object -Property Version -Descending | Select-Object -First 1 If( ($local:Module).RepositorySourceLocation) { $local:Version = Get-ModuleVersionInfo -Module $local:Module Write-Host ('Checking {0}' -f $local:Item.Description) -NoNewLine $local:NewerAvailable= $false $OnlineModule = Find-myModule -Name $local:Item.Module -ErrorAction SilentlyContinue If( $OnlineModule) { Write-Host (': Local:{0}, Online:{1}' -f $local:Version, $OnlineModule.version) If( (Compare-TextVersionNumber -Version $local:Version -CompareTo $OnlineModule.version) -eq 1) { $local:NewerAvailable= $true } } Else { # Not installed from online or cannot determine Write-Host ('Local:{0} Online:N/A' -f $local:Version) } If( $local:NewerAvailable) { $local:UpdateSuccess= $false Try { Update-myModule -Name $local:Item.Module $local:UpdateSuccess= $true } Catch { Write-Error ('Problem updating {0}:{1}' -f $local:Item.Module, $Error[0].Exception.Message) } If( $local:UpdateSuccess) { $local:ModuleVersions= Get-myModule -Name $local:Item.Module -ListAvailable -All $local:Module = $local:ModuleVersions | Sort-Object -Property @{e={ [System.Version]($_.Version -replace '[^\d\.]','')}} -Descending | Select-Object -First 1 $local:LatestVersion = ($local:Module).Version Write-Host ('Updated {0} to version {1}' -f $local:Item.Description, $local:LatestVersion) -ForegroundColor Green # Uninstall all old versions of module & dependencies If( $OnlineModule) { ForEach( $DependencyModule in $Module.Dependencies) { $local:DepModuleVersions= Get-myModule -Name $DependencyModule.Name -ListAvailable $local:DepModule = $local:DepModuleVersions | Sort-Object -Property @{e={ [System.Version]($_.Version -replace '[^\d\.]','')}} -Descending | Select-Object -First 1 $local:DepLatestVersion = ($local:DepModule).Version $local:OldDepModules= $local:DepModuleVersions | Where-Object {$_.Version -ne $local:DepLatestVersion} $local:OldDepModules | ForEach-Object { $DepModule= $_ Write-Host ('Uninstalling dependency {0} version {1}' -f $DepModule.Name, $DepModule.Version) Try { Uninstall-myModule -Name $DepModule.Name -Version $DepModule.Version -IsPrerelease:$DepModule.IsPrerelease } Catch { Write-Error ('Problem uninstalling {0} version {1}' -f $DepModule.Name, $DepModule.Version) } } } $local:OldModules= $local:ModuleVersions | Where-Object {$_.Version -ne $local:LatestVersion} If( $local:OldModules) { ForEach( $OldModule in $local:OldModules) { Write-Host ('Uninstalling {0} version {1}' -f $local:Item.Description, $OldModule.Version) -ForegroundColor White Try { Uninstall-myModule -Name $OldModule.Name -Version $OldModule.Version -IsPrerelease:$OldModule.IsPrerelease } Catch { Write-Error ('Problem uninstalling {0} version {1}' -f $OldModule.Name, $OldModule.Version) } } } } } Else { # Problem during update } } Else { # No update available } } Else { # Not installed } } } Else { Write-Warning ('Script not running with elevated privileges; cannot update modules') } } |