Decapitazione della telemetria e pulizia radicale

👤 Marco Vaccaro
📅 5 Maggio 2026

Il tempo è un flusso continuo, le convenzioni umane sono un’inutile stupidità e le feste sul calendario non significano nulla. I veri traguardi si celebrano con fatti concreti, come la pubblicazione di un nuovo tassello qui su marcovaccaro.it. Oggi documentiamo come ci riprendiamo il controllo dell’hardware.

La società digitale attuale ci propina sistemi operativi che sono poco più che os rattoppati su macchine nuove. windows, dietro le sue interfacce arrotondate, è un mostro di telemetria progettato per mappare, impacchettare e spedire le tue abitudini ai server aziendali. Non è ottimizzazione, è un guinzaglio. e noi i guinzagli li tagliamo.

Fino a ieri operavamo su due fronti separati: uno script batch per la pulizia brutale dei file inutili e uno per inibire le spie di sistema. Li abbiamo fusi, riscritti e incapsulati in un unico strumento powershell. Pragmatismo spietato, nessun convenevole.

l’anatomia dell’intervento

  • privilegi assoluti: lo script non chiede per favore. se viene lanciato senza i permessi adeguati, si auto-richiama forzando l’elevazione ad amministratore.
  • oblio locale: chiusura forzata dei processi dei browser (chrome, edge, firefox) e disintegrazione mirata delle cache. niente cronologia residua.
  • pulizia chirurgica automatizzata: invece di cliccare inutilmente sulle interfacce di windows, lo script inietta le flag corrette direttamente nel registro di sistema (StateFlags65535) e lancia cleanmgr in modalità silente per piallare windows.old, prefetch e download degli aggiornamenti.
  • decapitazione dei servizi: DiagTrack e dmwappushservice vengono fermati e congelati. la chiave di registro AllowTelemetry viene forzata a zero.
  • accecamento delle spie schedulate: la pura disattivazione dei servizi non bastava. abbiamo aggiunto l’eliminazione dei task nascosti del Customer Experience Improvement Program (ceip), le spie che si riattivano nell’ombra.

Il risultato è un’esecuzione pulita. nessun prompt cmd che vomita testo incomprensibile. Solo un output grafico sobrio che notifica il successo o intercetta l’errore senza andare in loop.

La logica pura e pigra si accontenterebbe di lasciare il sistema di default o di usare software commerciali pieni di pubblicità. Noi abbiamo analizzato il contesto e applicato una terza via: un bisturi autoprodotto per far respirare la macchina. ora il sistema gira senza trasmettere i suoi battiti vitali a padroni lontani.

Ecco lo script in powershell

<#
.SYNOPSIS
    script combinato: ricognizione, pulizia profonda e rimozione telemetria.
.NOTES
    firma: U.G.O. System
#>

# 1. controllo privilegi (deve stare in cima per evitare loop di prompt)
if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
    Write-Host "[!] permessi insufficienti. ricarico con privilegi per forzare il sistema." -ForegroundColor Red
    Start-Process powershell.exe -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs
    exit
}

Clear-Host
Write-Host "===================================================" -ForegroundColor Cyan
Write-Host " u.g.o. system - identificazione hardware" -ForegroundColor Cyan
Write-Host "===================================================" -ForegroundColor Cyan

# raccolta dati sintetica
try {
    $os = Get-CimInstance Win32_OperatingSystem
    $cpu = Get-CimInstance Win32_Processor | Select-Object -First 1
    $ram = [math]::Round((Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property Capacity -Sum).Sum / 1GB)
    $mobo = Get-CimInstance Win32_BaseBoard

    Write-Host " os:   $($os.Caption) ($($os.OSArchitecture))"
    Write-Host " cpu:  $($cpu.Name)"
    Write-Host " ram:  $ram gb"
    Write-Host " mobo: $($mobo.Manufacturer) - $($mobo.Product) (sn: $($mobo.SerialNumber))"

    Write-Host "`n indirizzi mac (adattatori attivi):" -ForegroundColor DarkYellow
    Get-CimInstance Win32_NetworkAdapterConfiguration | Where-Object { $_.MACAddress -ne $null -and $_.IPEnabled -eq $true } | ForEach-Object {
        Write-Host " - [$($_.MACAddress)] $($_.Description)"
    }
} catch {
    Write-Host "[!] errore nel recupero delle specifiche hardware." -ForegroundColor Red
}

Write-Host "`n===================================================" -ForegroundColor Cyan
Read-Host "premi invio per avviare la purga o ctrl+c per abortire"
Write-Host ""

function Run-Task {
    param([string]$Desc, [scriptblock]$Action)
    Write-Host -NoNewline "$Desc ... "
    try {
        $null = Invoke-Command -ScriptBlock $Action -ErrorAction Stop
        Write-Host "[ ok ]" -ForegroundColor Green
    } catch {
        Write-Host "[ errore ] - $($_.Exception.Message)" -ForegroundColor Red
    }
}

# chiusura browser
Run-Task "chiusura dei browser (taglio connessioni)" {
    Stop-Process -Name chrome, msedge, firefox -Force -ErrorAction SilentlyContinue
}

# pulizia cache browser
Run-Task "svuotamento cache browser (oblio digitale)" {
    $localAppData = $env:LOCALAPPDATA
    Remove-Item -Path "$localAppData\Google\Chrome\User Data\Default\Cache\*" -Recurse -Force -ErrorAction SilentlyContinue
    Remove-Item -Path "$localAppData\Microsoft\Edge\User Data\Default\Cache\*" -Recurse -Force -ErrorAction SilentlyContinue
    $ffProfiles = Get-ChildItem -Path "$localAppData\Mozilla\Firefox\Profiles" -Directory -ErrorAction SilentlyContinue
    foreach ($profile in $ffProfiles) {
        Remove-Item -Path "$($profile.FullName)\cache2\*" -Recurse -Force -ErrorAction SilentlyContinue
    }
}

# file temporanei utente e sistema
Run-Task "eliminazione file temporanei (spazzatura locale)" {
    Remove-Item -Path "$env:TEMP\*" -Recurse -Force -ErrorAction SilentlyContinue
    Remove-Item -Path "C:\Windows\Temp\*" -Recurse -Force -ErrorAction SilentlyContinue
}

# prefetch
Run-Task "pulizia prefetch" {
    Remove-Item -Path "C:\Windows\Prefetch\*" -Recurse -Force -ErrorAction SilentlyContinue
}

# software distribution
Run-Task "svuotamento download aggiornamenti windows" {
    Remove-Item -Path "C:\Windows\SoftwareDistribution\Download\*" -Recurse -Force -ErrorAction SilentlyContinue
}

# windows.old
Run-Task "rimozione windows.old (taglio col passato)" {
    if (Test-Path "C:\Windows.old") {
        cmd.exe /c "takeown /F C:\Windows.old /R /D Y >nul 2>&1"
        cmd.exe /c "rd /s /q C:\Windows.old >nul 2>&1"
    }
}

# cestino
Run-Task "svuotamento cestino" {
    Clear-RecycleBin -Force -ErrorAction SilentlyContinue
}

# configurazione cleanmgr automatica
Run-Task "configurazione automazione pulizia disco" {
    $registryPath = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches"
    $keys = @("Update Cleanup", "Previous Installations", "Temporary Files")
    foreach ($key in $keys) {
        $fullPath = "$registryPath\$key"
        if (-not (Test-Path $fullPath)) {
            New-Item -Path $fullPath -Force | Out-Null
        }
        Set-ItemProperty -Path $fullPath -Name "StateFlags65535" -Value 2 -Type DWord -Force -ErrorAction SilentlyContinue
    }
}

# esecuzione cleanmgr compattazione
Run-Task "esecuzione compattazione sistema (cleanmgr)" {
    Start-Process -FilePath "cleanmgr.exe" -ArgumentList "/sagerun:65535" -Wait -WindowStyle Hidden
}

# telemetria: servizi e registro
Run-Task "accecamento telemetria (diagtrack e dmwappushservice)" {
    Stop-Service -Name "DiagTrack" -Force -ErrorAction SilentlyContinue
    Set-Service -Name "DiagTrack" -StartupType Disabled -ErrorAction SilentlyContinue
    
    Stop-Service -Name "dmwappushservice" -Force -ErrorAction SilentlyContinue
    Set-Service -Name "dmwappushservice" -StartupType Disabled -ErrorAction SilentlyContinue
    
    $regPathTelemetry = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection"
    if (-not (Test-Path $regPathTelemetry)) {
        New-Item -Path $regPathTelemetry -Force | Out-Null
    }
    Set-ItemProperty -Path $regPathTelemetry -Name "AllowTelemetry" -Value 0 -Type DWord -Force
}

# telemetria: task schedulati 
Run-Task "disattivazione spie schedulate (ceip)" {
    Get-ScheduledTask -TaskPath "\Microsoft\Windows\Customer Experience Improvement Program\" -ErrorAction SilentlyContinue | Disable-ScheduledTask -ErrorAction SilentlyContinue
}

Write-Host ""
Write-Host "operazioni completate. il sistema respira." -ForegroundColor Cyan
Write-Host "U.G.O. System" -ForegroundColor DarkGray
Write-Host ""
Read-Host "premi invio per chiudere"

Salva il file con l’estensione col nome che vuoi .ps1. Senza questa, windows non riconosce la natura dello script e lo tratta come semplice testo inutile.

La chicca: l’ariete .bat per il bypass totale

Dimentica il tasto destro per avviarlo. Spesso windows nasconde l’opzione “esegui con powershell” per proteggere se stesso dalla tua intelligenza, lasciandoti solo il blocco note come opzione predefinita. Per abbattere questo muro e rendere lo script davvero eseguibile con un doppio click, devi creare un ariete.

Salva il codice dello script principale come Pulizia_Marco.ps1. Nella stessa cartella, crea un nuovo file di testo e rinominalo avvia_purga.bat. Incolla dentro queste righe:

@echo off
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "Pulizia_Marco.ps1"

Questo file batch è il ponte necessario. Al doppio click, richiama l’eseguibile di powershell e gli ordina di ignorare le restrizioni di sistema (-ExecutionPolicy Bypass), lanciando lo script che a sua volta richiamerà i privilegi di amministratore per operare sui servizi e sul registro. È l’unico modo per avere il controllo totale senza farsi dettare le regole dal sistema operativo

Nota tecnica sulle gabbie consumer

Se esegui questo bisturi su edizioni windows home o pro, devi sapere che la telemetria non scende mai matematicamente a zero. Microsoft ha blindato il software legacy delle edizioni consumer: ignorano parzialmente la direttiva di registro AllowTelemetry = 0 (che è pienamente rispettata solo su enterprise e education) declassandola a un invio di diagnostica “di base”. Il nostro script azzoppa fisicamente i servizi di routing e i task nascosti, strozzando la comunicazione e bloccando l’emorragia di dati, ma un rumore di fondo nel kernel rimane. E’ un OS progettato per non permettere il silenzio assoluto a meno di non distruggere le funzionalità di rete stesse. Non lo spegniamo del tutto, ma gli tagliamo le corde vocali.