PSUtilities.psm1
Function Update-LocalModules { Param ( [switch]$RemoveOld ) $Startscript = Get-Date Start-Transcript -Path .\UpdateModules$("{0:yyMMddHHmm}"-f (get-date)).log -Force <# .DESCRIPTION This Function updates local PowerShell modules with the last version online and deletes all the older local versions It registers all the activity in .\UpdateModules.log .PARAMETER RemoveOld This switch parameter removes the outdated local modules from disk #> #Checks Internet Conectivity if (-not( [Activator]::CreateInstance([Type]::GetTypeFromCLSID([Guid]'{DCB00C01-570F-4A9B-8D69-199FDBA5723B}')).IsConnectedToInternet )){Throw "The machine needs to be connected to the internet"} Write-Host "Checking online modules..." $OnlineModules = Find-Module $CurrentFreespace = [math]::Round( (Get-Ciminstance -ClassName win32_logicaldisk | Where DeviceId -eq "C:").FreeSpace / 1mb,2) #Gets current latest module version installed Write-Host "Looking for Installed Modules..." -Foregroundcolor Green $Latest = Get-InstalledModule foreach ($module in $Latest) { #Local module is also online, shows the two versions if ($module.name -in ($OnlineModules).name) { $OnlineModule = $OnlineModules | where name -EQ $module.name Write-Host "`nOnline module: " -ForegroundColor Green -NoNewline Write-Host "$(($OnlineModule).Version) $($OnlineModule.name)" -ForegroundColor Green -NoNewline Write-Host " (Published on $("{0:dd/MM/yyyy}" -f $OnlineModule.PublishedDate) - $(((Get-Date) - $OnlineModule.PublishedDate).Days) Days ago)" -ForegroundColor Gray Write-Host "Local Module: " -ForegroundColor Gray -NoNewline write-host "$(($module).Version) $($module.name)" -ForegroundColor Gray -NoNewline if ($module.Version -lt $OnlineModule.Version) { Write-Host "`nLocal version outdated, installing new online version... " -ForegroundColor Yellow -NoNewline Write-Host "$(($OnlineModule).Version) $($OnlineModule.name)" -ForegroundColor Green Install-Module -Name $OnlineModule.name -Force $module.version = $OnlineModule.Version } else {Write-Host " Ok" -ForegroundColor White} } #Removes the older versions if parameter -RemoveOld has been specified if ($RemoveOld) { $Oldlocalmodules = Get-InstalledModule $module.Name -AllVersions | Where-Object {$_.Version -ne $module.Version} if ($Oldlocalmodules -ne $null) {Write-Host "Old modules found. Unninstalling older modules..." -ForegroundColor Gray; $Oldlocalmodules | Uninstall-Module -Force -Verbose } } } if ($RemoveOld) { $CleanedFreespace = [math]::Round( (Get-Ciminstance -ClassName win32_logicaldisk | Where DeviceId -eq "C:").FreeSpace / 1mb,2) $Freedspace = $CleanedFreespace - $CurrentFreespace Write-Host "`nFreed Space in C: $([math]::round($Freedspace,2)) MB" -ForegroundColor Green Write-Host "Current Space in C: $([math]::round($CleanedFreespace,2)) MB" -ForegroundColor Green } Write-Host "Time elapsed: $(((Get-Date) - $Startscript).Minutes) Minute(s)" -ForegroundColor Green Stop-Transcript } Export-ModuleMember -Function Update-LocalModules |