Some checks failed
Build, Push, Publish / Build & Release (push) Failing after 2s
77 lines
3.0 KiB
PowerShell
77 lines
3.0 KiB
PowerShell
|
||
# Check for administrator privileges
|
||
$currentIdentity = [Security.Principal.WindowsIdentity]::GetCurrent()
|
||
$principal = New-Object Security.Principal.WindowsPrincipal($currentIdentity)
|
||
if (-not $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
|
||
Write-Host "⚠ This script must be run as Administrator. Please restart PowerShell with elevated privileges." -ForegroundColor Yellow
|
||
Read-Host -Prompt "Press Enter to exit"
|
||
exit
|
||
}
|
||
|
||
# Trust PSGallery if not already trusted
|
||
try {
|
||
if ((Get-PSRepository -Name "PSGallery").InstallationPolicy -ne "Trusted") {
|
||
Set-PSRepository -Name "PSGallery" -InstallationPolicy Trusted
|
||
}
|
||
} catch {
|
||
Write-Warning "Failed to set PSGallery as trusted: $($_.Exception.Message)"
|
||
}
|
||
|
||
# List of required modules
|
||
$modules = @(
|
||
'MicrosoftTeams',
|
||
'ImportExcel',
|
||
'Microsoft.Graph',
|
||
'ExchangeOnlineManagement'
|
||
)
|
||
|
||
|
||
$updatedModules = @()
|
||
|
||
foreach ($module in $modules) {
|
||
try {
|
||
$installed = Get-InstalledModule -Name $module -ErrorAction Stop
|
||
Write-Host "`nUpdating module: $module (Current: $($installed.Version))" -ForegroundColor Cyan
|
||
Update-Module -Name $module -Force -ErrorAction Stop
|
||
$updatedModules += $module
|
||
Write-Host "Updated $module to latest version." -ForegroundColor Green
|
||
} catch {
|
||
Write-Host "`nModule not found or update failed: $module. Attempting install..." -ForegroundColor Yellow
|
||
try {
|
||
Install-Module -Name $module -Scope AllUsers -Force -AllowClobber -ErrorAction Stop
|
||
Write-Host "Successfully installed $module." -ForegroundColor Green
|
||
$updatedModules += $module
|
||
} catch {
|
||
Write-Warning ("Failed to install {0}: {1}" -f $module, $_.Exception.Message)
|
||
}
|
||
}
|
||
}
|
||
|
||
# Ask user if they want to remove old versions
|
||
if ($updatedModules.Count -gt 0) {
|
||
$response = Read-Host "`nDo you want to remove old versions of the updated modules? (y/n)"
|
||
if ($response -match '^(y|yes)$') {
|
||
foreach ($module in $updatedModules) {
|
||
try {
|
||
$allVersions = Get-InstalledModule -Name $module -AllVersions
|
||
$latest = $allVersions | Sort-Object Version -Descending | Select-Object -First 1
|
||
$oldVersions = $allVersions | Where-Object { $_.Version -ne $latest.Version }
|
||
|
||
foreach ($old in $oldVersions) {
|
||
Write-Host "Removing old version $($old.Version) of $module..." -ForegroundColor DarkGray
|
||
Uninstall-Module -Name $module -RequiredVersion $old.Version -Force -ErrorAction Stop
|
||
}
|
||
Write-Host "Cleaned up old versions of $module." -ForegroundColor Green
|
||
} catch {
|
||
Write-Warning ("Failed to remove old versions of {0}: {1}" -f $module, $_.Exception.Message)
|
||
}
|
||
}
|
||
} else {
|
||
Write-Host "Skipping module cleanup." -ForegroundColor Yellow
|
||
}
|
||
}
|
||
|
||
Write-Host "`nAll modules processed successfully." -ForegroundColor Cyan
|
||
Read-Host -Prompt "Press Enter to exit"
|
||
|