ADS

Visualizzazione post con etichetta winget. Mostra tutti i post
Visualizzazione post con etichetta winget. Mostra tutti i post

lunedì 13 aprile 2026

Update e Pulizia da PowerShell

Ho creato, con l'aiuto dell' IA, un piccolo programmino in PowerShell. Va salvato in formato .ps1 e quindi eseguito come .\Update.ps1
Si deve eseguire come amministratore e se non lo fate ve lo ricorda. Dalla pulizia dei profili potete escludere i vari utenti che non volete cancellare, basta aggiungerli a quelli preimpostati.

Il programmino esegue l'update di tutte le app tramite WINGET e se non funziona controlla che i vari servizi siano attivi, Esegue la pulizia dei profili utente, comodissimo in ambiente scolastico e poi fa l'update di Windows senza usare la GUI classica ma da riga di comando.


SOS_Global_Fix_Final.ps1


# Incolla qui il contenuto dello script PowerShell

# ----------------------------------------------------------------
# SOS PC SCHOOL FINAL - Fix, Update, Pulizia & Reboot
# ----------------------------------------------------------------
Clear-Host
$host.ui.RawUI.WindowTitle = "SOS Globale FINAL - Assistenza Tecnica"

# Header Grafico
Write-Host "==========================================================" -ForegroundColor Cyan
Write-Host "   _____  ____   _____    _____ _      ____  ____          _      " -ForegroundColor Cyan
Write-Host "  / ____|/ __ \ / ____|  / ____| |    / __ \|  _ \   /\   | |     " -ForegroundColor Cyan
Write-Host " | (___ | |  | | (___   | |  __| |   | |  | | |_) | /  \  | |     " -ForegroundColor Cyan
Write-Host "  \___ \| |  | |\___ \  | | |_ | |   | |  | |  _ < / /\ \ | |     " -ForegroundColor Cyan
Write-Host "  ____) | |__| |____) | | |__| | |___| |__| | |_) / ____ \| |____ " -ForegroundColor Cyan
Write-Host " |_____/ \____/|_____/   \_____|______\____/|____/_/    \_\______|" -ForegroundColor Cyan
Write-Host "==========================================================" -ForegroundColor Cyan
Write-Host "   FIX REGISTRO + UPDATES + PULIZIA PROFILI + REBOOT       " -ForegroundColor Yellow
Write-Host "==========================================================" -ForegroundColor Cyan

# 1. Verifica Privilegi Administrator
if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
    Write-Host " [!] ERRORE: Devi eseguire questo script come AMMINISTRATORE." -ForegroundColor Red
    Start-Sleep -Seconds 5
    exit
}

# 2. Fix Registro Servizi (AppXSVC, ClipSVC, wuauserv, bits, DoSvc)
Write-Host "[*] Ripristino chiavi di registro per i servizi critici..." -ForegroundColor White
$RegistryPaths = @(
    "HKLM:\SYSTEM\CurrentControlSet\Services\AppXSVC",
    "HKLM:\SYSTEM\CurrentControlSet\Services\ClipSVC",
    "HKLM:\SYSTEM\CurrentControlSet\Services\wuauserv",
    "HKLM:\SYSTEM\CurrentControlSet\Services\bits",
    "HKLM:\SYSTEM\CurrentControlSet\Services\DoSvc"
)
foreach ($path in $RegistryPaths) {
    if (Test-Path $path) {
        Set-ItemProperty -Path $path -Name "Start" -Value 2
        Write-Host " [+] Reset completato: $($path.Split('\')[-1])" -ForegroundColor Gray
    }
}

# 3. Pulizia Profili Studenti (Esclusioni: Amministratore, ECDL, Invalsi)
Write-Host "`n[*] Analisi e pulizia profili utenti locali..." -ForegroundColor Magenta
$Esclusioni = 'Amministratore|ECDL|Invalsi|Public|Default'
$ProfiliDaEliminare = Get-WmiObject -Class Win32_UserProfile | Where-Object {
    $_.Special -eq $false -and 
    $_.LocalPath -notmatch $Esclusioni -and 
    $_.LastUseTime -lt (Get-Date).AddDays(-1).ToString('yyyyMMddHHmmss.ffffff-000')
}

if ($ProfiliDaEliminare) {
    foreach ($Profilo in $ProfiliDaEliminare) {
        try {
            Write-Host " [-] Rimozione profilo: $($Profilo.LocalPath)" -ForegroundColor Gray
            $Profilo.Delete()
        } catch {
            Write-Host " [!] Errore rimozione $($Profilo.LocalPath) (Profilo in uso)." -ForegroundColor Red
        }
    }
} else {
    Write-Host " [OK] Nessun profilo studente da rimuovere." -ForegroundColor Gray
}

# 4. Configurazione Ambiente e Modulo Update
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force
if (-not (Get-Module -ListAvailable -Name PSWindowsUpdate)) {
    Write-Host "`n[+] Installazione componenti per Windows Update..." -ForegroundColor Green
    Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force | Out-Null
    Install-Module PSWindowsUpdate -Force -AllowClobber | Out-Null
}

# 5. Esecuzione Windows Update (Sistema)
Write-Host "`n[*] Avvio Windows Update (Sistema Operativo)..." -ForegroundColor Cyan
try {
    Import-Module PSWindowsUpdate
    Get-WindowsUpdate -AcceptAll -Install -AutoReboot:$false -ErrorAction SilentlyContinue
} catch {
    Write-Host " [!] Errore durante l'update di sistema." -ForegroundColor Red
}

# 6. Esecuzione Winget Update (App di terze parti)
Write-Host "`n[*] Avvio Winget Update (Applicazioni)..." -ForegroundColor Yellow
winget source update --name winget | Out-Null
winget update --all --silent --accept-package-agreements --accept-source-agreements

# 7. Chiusura e Riavvio Automatico
Write-Host "`n==========================================================" -ForegroundColor Cyan
Write-Host " OPERAZIONE COMPLETATA CON SUCCESSO! " -ForegroundColor Green
Write-Host "==========================================================" -ForegroundColor Cyan
Write-Host " Il PC si riavviera' tra 30 secondi." -ForegroundColor Red
Write-Host " Chiudi questa finestra per annullare il riavvio." -ForegroundColor Gray

Start-Sleep -Seconds 30
Restart-Computer -Force

    

mercoledì 3 aprile 2024

Risolviamo i problemi di WINGET

Avevo già parlato del comando WINGET perchè molto utilizzato in ambiente sistemistico per aggiornare tutte le applicazioni di PC anche remoti in un sol colpo e senza intervento locale.

Può capitare che una volta dato il comando, qualcosa vada storto e ci siano errori nella gestione dei link per il download oppure vi siano problemi e il comando non venga trovato.

Vediamo come sistemare applicando due semplici passi:

Il primo è quello di aggiornare forzatamente il pacchetto WINGET prelevandolo da questo link ed eseguendolo...

Il secondo consiste nel resettare completamente l'applicazione Store di Microsoft su cui si basa WINGET.




Queste due soluzioni dovrebbero ripristinare il funzionamento corretto di Winget da eseguire da PS o CMD con il comando: WINGET UPGRADE --ALL