diff --git a/aliases.ps1 b/aliases.ps1 new file mode 100644 index 0000000..f377e2f --- /dev/null +++ b/aliases.ps1 @@ -0,0 +1 @@ +set-alias -name Update -value Update \ No newline at end of file diff --git a/functions.ps1 b/functions.ps1 new file mode 100644 index 0000000..fe2d16f --- /dev/null +++ b/functions.ps1 @@ -0,0 +1,150 @@ +function Update { + + Write-Host "Beginne mit dem Update aller Pakete..." + winget upgrade --all + remove-item ~\Desktop* -include *.lnk + if (Get-Module -ListAvailable -Name PSWindowsUpdate) { + Write-Host "Installiere Windows Updates..." + Install-WindowsUpdate -MicrosoftUpdate -AcceptAll -IgnoreReboot + Write-Host "Update aller Powershell Module..." + if ($SimulationMode) { + Write-Host -ForegroundColor yellow 'Simulation mode is ON, nothing will be installed / removed / updated' + } + Write-Host -ForegroundColor Cyan 'Get all PowerShell modules' + function Remove-OldPowerShellModules { + param ( + [string]$ModuleName, + [string]$GalleryVersion + ) + + try { + $oldVersions = Get-InstalledModule -Name $ModuleName -AllVersions -ErrorAction Stop | Where-Object { $_.Version -ne $GalleryVersion } + + foreach ($oldVersion in $oldVersions) { + Write-Host -ForegroundColor Cyan "$ModuleName - Uninstall previous version ($($oldVersion.Version))" + if (-not($SimulationMode)) { + Remove-Module $ModuleName -ErrorAction SilentlyContinue + Uninstall-Module $oldVersion -Force -ErrorAction Stop + } + } + } + catch { + Write-Warning "$module - $($_.Exception.Message)" + } + } + + if ($IncludedModules) { + $modules = Get-InstalledModule | Where-Object { $IncludedModules -contains $_.Name } + } + else { + $modules = Get-InstalledModule + } + + foreach ($module in $modules.Name) { + if ($ExcludedModules -contains $module) { + Write-Host -ForegroundColor Yellow "Module $module is excluded from the update process" + continue + } + elseif ($module -like "$excludedModules") { + Write-Host -ForegroundColor Yellow "Module $module is excluded from the update process (match $excludeModules)" + continue + } + + $currentVersion = $null + + try { + $currentVersion = (Get-InstalledModule -Name $module -AllVersions -ErrorAction Stop).Version + } + catch { + Write-Warning "$module - $($_.Exception.Message)" + continue + } + + try { + $moduleGalleryInfo = Find-Module -Name $module -ErrorAction Stop + } + catch { + Write-Warning "$module not found in the PowerShell Gallery. $($_.Exception.Message)" + } + + if ($null -eq $currentVersion) { + Write-Host -ForegroundColor Cyan "$module - Install from PowerShellGallery version $($moduleGalleryInfo.Version) - Release date: $($moduleGalleryInfo.PublishedDate)" + + if (-not($SimulationMode)) { + try { + Install-Module -Name $module -Force -SkipPublisherCheck -ErrorAction Stop + } + catch { + Write-Warning "$module - $($_.Exception.Message)" + } + } + } + elseif ($moduleGalleryInfo.Version -eq $currentVersion) { + Write-Host -ForegroundColor Green "$module already in latest version: $currentVersion - Release date: $($moduleGalleryInfo.PublishedDate)" + } + elseif ($currentVersion.count -gt 1) { + Write-Host -ForegroundColor Yellow "$module is installed in $($currentVersion.count) versions (versions: $($currentVersion -join ' | '))" + Write-Host -ForegroundColor Cyan "$module - Uninstall previous $module version(s) below the latest version ($($moduleGalleryInfo.Version))" + + Remove-OldPowerShellModules -ModuleName $module -GalleryVersion $moduleGalleryInfo.Version + + # Check again the current Version as we uninstalled some old versions + $currentVersion = (Get-InstalledModule -Name $module).Version + + if ($moduleGalleryInfo.Version -ne $currentVersion) { + Write-Host -ForegroundColor Cyan "$module - Install from PowerShellGallery version $($moduleGalleryInfo.Version) - Release date: $($moduleGalleryInfo.PublishedDate)" + if (-not($SimulationMode)) { + try { + Install-Module -Name $module -Force -ErrorAction Stop + + Remove-OldPowerShellModules -ModuleName $module -GalleryVersion $moduleGalleryInfo.Version + } + catch { + Write-Warning "$module - $($_.Exception.Message)" + } + } + } + } + # https://invoke-thebrain.com/2018/12/comparing-version-numbers-powershell/ + elseif ([version]$currentVersion -gt [version]$moduleGalleryInfo.Version) { + Write-Host -ForegroundColor Yellow "$module - the current version $currentVersion is newer than the version available on PowerShell Gallery $($moduleGalleryInfo.Version) (Release date: $($moduleGalleryInfo.PublishedDate)). Sometimes happens when you install a module from another repository or via .exe/.msi or if you change the version number manually." + } + elseif ([version]$currentVersion -lt [version]$moduleGalleryInfo.Version) { + Write-Host -ForegroundColor Cyan "$module - Update from PowerShellGallery version " -NoNewline + Write-Host -ForegroundColor White "$currentVersion -> $($moduleGalleryInfo.Version) " -NoNewline + Write-Host -ForegroundColor Cyan "- Release date: $($moduleGalleryInfo.PublishedDate)" + + if (-not($SimulationMode)) { + try { + Update-Module -Name $module -Force -ErrorAction Stop + Remove-OldPowerShellModules -ModuleName $module -GalleryVersion $moduleGalleryInfo.Version + } + catch { + if ($_.Exception.Message -match 'Authenticode') { + Write-Host -ForegroundColor Yellow "$module - The module certificate used by the creator is either changed since the last module install or the module sign status has changed." + + if ($SkipPublisherCheck.IsPresent) { + Write-Host -ForegroundColor Cyan "$module - SkipPublisherCheck Parameter is present, so install will run without Authenticode check" + Write-Host -ForegroundColor Cyan "$module - Install from PowerShellGallery version $($moduleGalleryInfo.Version) - Release date: $($moduleGalleryInfo.PublishedDate)" + try { + Install-Module -Name $module -Force -SkipPublisherCheck + } + catch { + Write-Warning "$module - $($_.Exception.Message)" + } + + Remove-OldPowerShellModules -ModuleName $module -GalleryVersion $moduleGalleryInfo.Version + } + else { + Write-Warning "$module - If you want to update this module, run again with -SkipPublisherCheck switch, but please keep in mind the security risk" + } + } + else { + Write-Warning "$module - $($_.Exception.Message)" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/install.ps1 b/install.ps1 index 530fc7d..06ead4a 100644 --- a/install.ps1 +++ b/install.ps1 @@ -126,6 +126,7 @@ do { Install-Script winfetch mkdir ~/.config/winfetch New-Item -Path "~/.config/winfetch/config.ps1" -ItemType SymbolicLink -Value "~/.winconfig/config.ps1" + New-Item -Path "~/Documents/WindowsPowerShell/profile.ps1" -ItemType SymbolicLink -Value "~/.winconfig/profile.ps1" Read-Host "Bitte das Terminal / Powershell neu starten damit Winfetch funktioniert." } diff --git a/profile.ps1 b/profile.ps1 new file mode 100644 index 0000000..bfbd154 --- /dev/null +++ b/profile.ps1 @@ -0,0 +1,3 @@ +# Lädt Funktionen aus der Ffunctions.ps1 +Get-ChildItem ~/.winconfig/functions.ps1 | %{. $_ } | out-null +Get-ChildItem ~/.winconfig/aliases.ps1 | out-null