Windows 11, il trucco di DefaultUser0 per creare ISO personalizzate già pronte al primo avvioWindows 11, il trucco di DefaultUser0 per creare ISO personalizzate già pronte al primo avvio

DefaultUser0 è uno degli elementi più sottovalutati del processo di installazione di Windows 11. Molti lo incontrano solo quando qualcosa va storto: una schermata di login anomala, un profilo rimasto in C:Users, un setup interrotto. In realtà, dietro questo account temporaneo si nasconde una fase delicatissima del provisioning di Windows, quella in cui il sistema non è ancora diventato un ambiente utente definitivo ma ha già iniziato a costruire le principali impostazioni operative.

Per chi lavora con immagini ISO personalizzate di Windows 11, deployment aziendali, laboratori tecnici o installazioni automatizzate, DefaultUser0 non va visto come una “leva” utile per creare installazioni del sistema operativo plasmate secondo le proprie necessità. All’atto pratico, DefaultUser0 è lo strumento che permette all’immagine generica di Windows 11 contenuta nel file install.wim a un sistema operativo pronto per il primo utente reale.

DefaultUser0: il punto nascosto in cui Windows 11 può essere davvero personalizzato

Invece di installare Windows 11 e poi correggerlo, alleggerirlo o riconfigurarlo, possiamo preparare una ISO già modellata in partenza. Possiamo rimuovere app preinstallate, integrare driver, impostare le preferenze legate alla privacy, ridurre componenti promozionali, abilitare l’uso di account locali, personalizzare il profilo utente iniziale e intervenire persino sull’ambiente di installazione WinPE, così da rendere coerente l’intero processo fin dal primo avvio.

In questa procedura costruiremo quindi una ISO personalizzata di Windows 11 partendo dal supporto ufficiale Microsoft. L’obiettivo non è creare una versione “moddata” in modo fragile o improvvisato, ma ottenere un’immagine tecnica, ripetibile e controllabile, capace di installare Windows 11 con impostazioni già definite prima ancora che l’utente finale acceda al desktop.

DefaultUser0 resta sullo sfondo, come traccia del processo di provisioning: la vera personalizzazione avviene prima: dentro install.wim, dentro boot.wim, nel registro contenuto nell’immagine ISO e negli script che Windows eseguirà durante setup e primo accesso.

A differenza dei classici script “tutto in uno”, analizzeremo la procedura passo dopo passo. Questo approccio ha un vantaggio fondamentale: permette ai lettori più tecnici di capire esattamente cosa viene modificato, in quale punto e con quale effetto sul sistema finale.

Ogni blocco di comandi sarà quindi accompagnato da una spiegazione operativa, così da poter essere adattato alle proprie esigenze. Chi desidera una ISO più leggera potrà rimuovere ulteriori componenti; chi lavora in ambito aziendale potrà integrare driver specifici, policy o script di provisioning; chi preferisce mantenere alcune funzionalità Microsoft potrà semplicemente eliminare o modificare le relative righe. Buona lettura!

Come personalizzare la ISO di Windows 11 passo dopo passo

Iniziamo la procedura servendoci di un PC Windows 10 o Windows 11 sul quale abbiamo già scaricato l’immagine del supporto d’installazione di Windows 11 in formato ISO. Allo scopo si può utilizzare il super trucco per il download di Windows 11 oppure fare riferimento alla pagina Scarica Windows 11 (sezione “Scarica l’immagine disco di Windows 11 (ISO) per dispositivi x64“).

Salviamo quindi l’immagine di Windows 11 nella cartella C:ISO e rinominiamola semplicemente in Win11.iso.

A questo punto, per iniziare a personalizzare la ISO di Windows 11, basta premere Windows+X, scegliere Terminale (Admin) oppure Windows PowerShell (amministratore) per poi incollare quanto segue.

Impostazione di variabili e cartelle di riferimento

In questa fase si definisce l’intero contesto operativo dello script. Vengono impostati i percorsi della ISO originale, delle directory di lavoro e del file finale che verrà generato. La creazione automatica delle cartelle garantisce un ambiente pulito e ripetibile, evitando errori dovuti a path mancanti o incoerenti.

# 0) Variabili
$ISO = "C:ISOWin11.iso"
$Work = "C:Win11_Custom"
$IsoRoot = "$WorkISO"
$Mount = "$WorkMount"
$Drivers = "$WorkDrivers"
$OutISO = "C:ISOWin11_Custom.iso"

New-Item -ItemType Directory -Force $Work,$IsoRoot,$Mount,$Drivers | Out-Null

Montaggio file ISO di Windows 11 e copia del contenuto

L’immagine ISO viene montata come unità virtuale, permettendo l’accesso diretto ai file di installazione. Il contenuto è poi copiato integralmente in una directory locale: questo è un passaggio fondamentale perché le modifiche non possono essere applicate direttamente alla ISO, ma solo a una copia “scompattata”.

# 1) Monta ISO originale e copia contenuto
$img = Mount-DiskImage -ImagePath $ISO -PassThru
$drv = ($img | Get-Volume).DriveLetter + ":"
robocopy "$drv" $IsoRoot /E
Dismount-DiskImage -ImagePath $ISO

I file provenienti dalla ISO sono spesso marcati come “sola lettura”: la rimozione di questo attributo consente agli strumenti di modifica (come DISM) di intervenire senza restrizioni su tutti i file dell’immagine.

# 2) Rendi scrivibili i file copiati
attrib -R "$IsoRoot*" /S /D

Scelta dell’edizione di Windows 11 da personalizzare

Il file install.wim contiene più varianti di Windows 11 (Home, Pro, Enterprise, ecc.). Questo passaggio permette di identificare con precisione quale edizione si desidera personalizzare, evitando modifiche inutili o applicate alla versione sbagliata.

# 3) Verifica le edizioni di Windows 11 disponibili
dism /Get-WimInfo /WimFile:"$IsoRootsourcesinstall.wim"

Dopo aver impartito il comando, l’utilità DISM fornisce la lista delle edizioni di Windows 11 presenti nel file install.wim. Una volta scelta quella che si vuole personalizzare, basta indicarne l’indice corrispondente nel comando che segue (nel nostro caso abbiamo specificato 5 perché è l’indice di Windows 11 Pro):

$Index = 5

Scelta edizione Windows 11 ISO personalizzata

Con il comando seguente, Windows provvede a montare il contenuto del file install.wim corrispondente all’edizione scelta:

# 4) Monta install.wim
Mount-WindowsImage `
  -ImagePath "$IsoRootsourcesinstall.wim" `
  -Index $Index `
  -Path $Mount `
  -Optimize

Rimozione delle applicazioni indesiderate

Qui si interviene sul provisioning delle applicazioni predefinite di Windows 11. La rimozione a livello di immagine impedisce che queste app siano installate automaticamente per ogni nuovo utente, riducendo il carico del sistema e migliorando la pulizia dell’installazione. Ovviamente è possibile rimuovere le righe facenti riferimento alle app Microsoft che si desiderassero conservare.

# 5) Rimuovi AppX provisioned indesiderate
$RemovePrefixes = @(
  "Clipchamp.Clipchamp",
  "Microsoft.BingNews",
  "Microsoft.BingSearch",
  "Microsoft.BingWeather",
  "Microsoft.GetHelp",
  "Microsoft.MicrosoftOfficeHub",
  "Microsoft.MicrosoftSolitaireCollection",
  "Microsoft.MicrosoftStickyNotes",
  "Microsoft.OutlookForWindows",
  "Microsoft.PowerAutomateDesktop",
  "Microsoft.StartExperiencesApp",
  "Microsoft.Todos",
  "Microsoft.Windows.DevHome",
  "Microsoft.WindowsFeedbackHub",
  "Microsoft.ZuneMusic",
  "MicrosoftCorporationII.QuickAssist",
  "MSTeams"
)

$Pkgs = dism /English /Image:$Mount /Get-ProvisionedAppxPackages |
  ForEach-Object {
    if ($_ -match "PackageName : (.*)") { $matches[1] }
  }

foreach ($pkg in $Pkgs) {
  foreach ($prefix in $RemovePrefixes) {
    if ($pkg -like "*$prefix*") {
      dism /English /Image:$Mount /Remove-ProvisionedAppxPackage /PackageName:$pkg
    }
  }
}

Iniezione driver nella ISO di Windows 11: quando serve davvero e come preparare correttamente la cartella

Uno dei passaggi più sottovalutati nella personalizzazione di una ISO di Windows 11 è la gestione dei driver. Spesso si tende a pensare che Windows sia già in grado di riconoscere automaticamente tutto l’hardware, ma nella pratica – soprattutto in ambienti tecnici, workstation particolari o sistemi recenti – non è sempre così.

Integrare i driver direttamente nell’immagine significa che Windows li avrà già disponibili durante l’installazione, senza dover dipendere da Windows Update, connessione Internet, * installazioni manuali post-setup.

È un approccio utile in diversi scenari: sistemi con controller NVMe/RAID non riconosciuti, laptop con chipset recenti non ancora supportati nativamente, ambienti offline o isolati, deployment ripetuti su hardware identico, creazione di ISO “pronte all’uso” per specifiche macchine.

La cartella valorizzata nella variabile $Drivers (C:Win11_CustomDrivers, nel nostro esempio) deve contenere driver già pronti (esempio: .inf, .sys, .cat). Non sono supportati eseguibili e file .MSI.

Nell’esempio che segue, esportiamo i driver del sistema correntemente in uso, ma ovviamente si può sostituire questa parte aggiungendo manualmente le risorse necessarie nella cartella $Drivers e invocando il successivo comando DISM.

# 6) Esporta e inietta driver del sistema corrente, opzionale
Export-WindowsDriver -Online -Destination $Drivers

dism /English /Image:$Mount /Add-Driver /Driver:$Drivers /Recurse

Caricamento del registro di DefaultUser0

Caricando gli hive del registro (SYSTEM, SOFTWARE, DEFAULT e NTUSER), si ottiene accesso completo alle configurazioni interne del sistema prima ancora che sia avviato. Così facendo, è possibile applicare modifiche che normalmente richiederebbero criteri di gruppo o script post-installazione.

# 7) Monta hive offline: SOFTWARE, SYSTEM, DEFAULT e profilo Default
reg load HKLMWIM_SOFTWARE "$MountWindowsSystem32configSOFTWARE"
reg load HKLMWIM_SYSTEM "$MountWindowsSystem32configSYSTEM"
reg load HKLMWIM_DEFAULT "$MountWindowsSystem32configDEFAULT"
reg load HKLMWIM_NTUSER "$MountUsersDefaultNTUSER.DAT"

Superamento dei requisiti minimi per l’installazione di Windows 11

In questa fase inseriamo chiavi e valori di registro che disattivano i controlli sui requisiti hardware. In questo modo, l’installazione può proseguire anche su macchine prive di TPM 2.0, Secure Boot o con specifiche inferiori a quelle richieste ufficialmente.

# 8) Bypass requisiti Windows 11
reg add "HKLMWIM_SYSTEMSetupLabConfig" /v BypassTPMCheck /t REG_DWORD /d 1 /f
reg add "HKLMWIM_SYSTEMSetupLabConfig" /v BypassSecureBootCheck /t REG_DWORD /d 1 /f
reg add "HKLMWIM_SYSTEMSetupLabConfig" /v BypassRAMCheck /t REG_DWORD /d 1 /f
reg add "HKLMWIM_SYSTEMSetupLabConfig" /v BypassStorageCheck /t REG_DWORD /d 1 /f
reg add "HKLMWIM_SYSTEMSetupMoSetup" /v AllowUpgradesWithUnsupportedTPMOrCPU /t REG_DWORD /d 1 /f

Abilitazione account locale durante OOBE

Si modifica il comportamento della fase OOBE (Out-Of-Box Experience) per evitare l’obbligo di connessione Internet e account Microsoft. Consente una configurazione di Windows 11 più flessibile, soprattutto in ambienti aziendali o isolati.

# 9) Abilita account locale durante OOBE
reg add "HKLMWIM_SOFTWAREMicrosoftWindowsCurrentVersionOOBE" /v BypassNRO /t REG_DWORD /d 1 /f

Disabilitazione contenuti consumer e suggerimenti

Eliminiamo tutte le componenti legate a contenuti promozionali, suggerimenti automatici e app sponsorizzate. Il risultato è un sistema più neutro, privo di elementi non richiesti dall’utente o dall’amministratore.

# 10) Disabilita consumer features, app sponsorizzate e contenuti suggeriti
reg add "HKLMWIM_SOFTWAREPoliciesMicrosoftWindowsCloudContent" /v DisableWindowsConsumerFeatures /t REG_DWORD /d 1 /f
reg add "HKLMWIM_SOFTWAREPoliciesMicrosoftWindowsCloudContent" /v DisableConsumerAccountStateContent /t REG_DWORD /d 1 /f
reg add "HKLMWIM_SOFTWAREPoliciesMicrosoftWindowsCloudContent" /v DisableCloudOptimizedContent /t REG_DWORD /d 1 /f

reg add "HKLMWIM_NTUSERSoftwareMicrosoftWindowsCurrentVersionContentDeliveryManager" /v ContentDeliveryAllowed /t REG_DWORD /d 0 /f
reg add "HKLMWIM_NTUSERSoftwareMicrosoftWindowsCurrentVersionContentDeliveryManager" /v OemPreInstalledAppsEnabled /t REG_DWORD /d 0 /f
reg add "HKLMWIM_NTUSERSoftwareMicrosoftWindowsCurrentVersionContentDeliveryManager" /v PreInstalledAppsEnabled /t REG_DWORD /d 0 /f
reg add "HKLMWIM_NTUSERSoftwareMicrosoftWindowsCurrentVersionContentDeliveryManager" /v SilentInstalledAppsEnabled /t REG_DWORD /d 0 /f
reg add "HKLMWIM_NTUSERSoftwareMicrosoftWindowsCurrentVersionContentDeliveryManager" /v SystemPaneSuggestionsEnabled /t REG_DWORD /d 0 /f

reg delete "HKLMWIM_NTUSERSoftwareMicrosoftWindowsCurrentVersionContentDeliveryManagerSubscriptions" /f
reg delete "HKLMWIM_NTUSERSoftwareMicrosoftWindowsCurrentVersionContentDeliveryManagerSuggestedApps" /f

Configurazione e personalizzazione di Esplora file

Si impostano parametri avanzati per Esplora file, come la visualizzazione delle estensioni e dei file nascosti. Sono modifiche pensate per ambienti tecnici, dove la trasparenza del file system è fondamentale.

# 11) Explorer: estensioni visibili, file nascosti, taskbar più pulita
reg add "HKLMWIM_NTUSERSoftwareMicrosoftWindowsCurrentVersionExplorerAdvanced" /v HideFileExt /t REG_DWORD /d 0 /f
reg add "HKLMWIM_NTUSERSoftwareMicrosoftWindowsCurrentVersionExplorerAdvanced" /v Hidden /t REG_DWORD /d 1 /f
reg add "HKLMWIM_NTUSERSoftwareMicrosoftWindowsCurrentVersionExplorerAdvanced" /v ShowSuperHidden /t REG_DWORD /d 1 /f
reg add "HKLMWIM_NTUSERSoftwareMicrosoftWindowsCurrentVersionExplorerAdvanced" /v TaskbarMn /t REG_DWORD /d 0 /f

Disabilitazione Copilot e componenti moderni

Qui si interviene per bloccare funzionalità integrate considerate non essenziali o spesso ritenute invasive, come Copilot, Teams e i suggerimenti intelligenti. L’obiettivo è mantenere il sistema leggero e prevedibile.

# 12) Disabilita Copilot, suggerimenti ricerca, Chat, Teams e nuovo Outlook
reg add "HKLMWIM_SOFTWAREPoliciesMicrosoftWindowsWindowsCopilot" /v TurnOffWindowsCopilot /t REG_DWORD /d 1 /f
reg add "HKLMWIM_SOFTWAREPoliciesMicrosoftWindowsExplorer" /v DisableSearchBoxSuggestions /t REG_DWORD /d 1 /f
reg add "HKLMWIM_SOFTWAREPoliciesMicrosoftWindowsWindows Chat" /v ChatIcon /t REG_DWORD /d 3 /f
reg add "HKLMWIM_SOFTWAREPoliciesMicrosoftTeams" /v DisableInstallation /t REG_DWORD /d 1 /f
reg add "HKLMWIM_SOFTWAREPoliciesMicrosoftWindowsWindows Mail" /v PreventRun /t REG_DWORD /d 1 /f

Privacy e telemetria

Le impostazioni riducono al minimo la raccolta dati e disattivano servizi di diagnostica avanzata. Questo approccio è particolarmente rilevante in contesti in cui la riservatezza dei dati è una priorità.

# 13) Privacy e telemetria
reg add "HKLMWIM_SOFTWAREPoliciesMicrosoftWindowsDataCollection" /v AllowTelemetry /t REG_DWORD /d 0 /f
reg add "HKLMWIM_NTUSERSoftwareMicrosoftWindowsCurrentVersionAdvertisingInfo" /v Enabled /t REG_DWORD /d 0 /f
reg add "HKLMWIM_NTUSERSoftwareMicrosoftWindowsCurrentVersionPrivacy" /v TailoredExperiencesWithDiagnosticDataEnabled /t REG_DWORD /d 0 /f
reg add "HKLMWIM_NTUSERSoftwareMicrosoftInputTIPC" /v Enabled /t REG_DWORD /d 0 /f
reg add "HKLMWIM_SYSTEMControlSet001Servicesdmwappushservice" /v Start /t REG_DWORD /d 4 /f

Controllo di Windows Update durante la fase OOBE

Durante la fase OOBE, Windows 11 tende ad avviare automaticamente processi di aggiornamento, download in background e verifiche di sistema che possono rallentare l’installazione o introdurre variabili indesiderate. Intervenire in questa fase significa mantenere il pieno controllo del provisioning iniziale, evitando che il sistema modifichi configurazioni appena applicate o avvii attività non previste.

Le istruzioni seguenti disabilitano temporaneamente i servizi e le policy legate a Windows Update, bloccando download automatici, orchestrazione degli aggiornamenti e componenti correlati. L’obiettivo non è disattivare definitivamente gli aggiornamenti, ma impedirne l’esecuzione durante il primo avvio, così da poterli gestire in modo più controllato nelle fasi successive.

# 14) Disabilita Windows Update durante OOBE
reg add "HKLMWIM_SOFTWAREPoliciesMicrosoftWindowsWindowsUpdateAU" /v NoAutoUpdate /t REG_DWORD /d 1 /f
reg add "HKLMWIM_SOFTWAREPoliciesMicrosoftWindowsWindowsUpdateAU" /v AUOptions /t REG_DWORD /d 1 /f
reg add "HKLMWIM_SOFTWAREPoliciesMicrosoftWindowsWindowsUpdateAU" /v UseWUServer /t REG_DWORD /d 1 /f

reg add "HKLMWIM_SOFTWAREPoliciesMicrosoftWindowsWindowsUpdate" /v DisableWindowsUpdateAccess /t REG_DWORD /d 1 /f
reg add "HKLMWIM_SOFTWAREPoliciesMicrosoftWindowsWindowsUpdate" /v WUServer /t REG_SZ /d "http://localhost:8080" /f
reg add "HKLMWIM_SOFTWAREPoliciesMicrosoftWindowsWindowsUpdate" /v WUStatusServer /t REG_SZ /d "http://localhost:8080" /f

reg add "HKLMWIM_SOFTWAREMicrosoftWindowsCurrentVersionWindowsUpdateOrchestratorUScheduler_OobeWindowsUpdate" /v workCompleted /t REG_DWORD /d 1 /f
reg add "HKLMWIM_SOFTWAREMicrosoftWindowsCurrentVersionDeliveryOptimizationConfig" /v DODownloadMode /t REG_DWORD /d 0 /f

reg add "HKLMWIM_SYSTEMControlSet001ServicesBITS" /v Start /t REG_DWORD /d 4 /f
reg add "HKLMWIM_SYSTEMControlSet001Serviceswuauserv" /v Start /t REG_DWORD /d 4 /f
reg add "HKLMWIM_SYSTEMControlSet001ServicesUsoSvc" /v Start /t REG_DWORD /d 4 /f
reg add "HKLMWIM_SYSTEMControlSet001ServicesWaaSMedicSvc" /v Start /t REG_DWORD /d 4 /f

OneDrive, BitLocker e storage riservato

Si disabilitano alcune funzionalità automatiche che possono interferire con ambienti controllati: sincronizzazione cloud, crittografia automatica e spazio disco riservato.

# 15) OneDrive, BitLocker device encryption, reserved storage
reg add "HKLMWIM_SOFTWAREPoliciesMicrosoftWindowsOneDrive" /v DisableFileSyncNGSC /t REG_DWORD /d 1 /f
reg add "HKLMWIM_SYSTEMControlSet001ControlBitLocker" /v PreventDeviceEncryption /t REG_DWORD /d 1 /f
reg add "HKLMWIM_SOFTWAREMicrosoftWindowsCurrentVersionReserveManager" /v ShippedWithReserves /t REG_DWORD /d 0 /f

Pulizia del menu Start

Il menu Start è configurato senza elementi predefiniti o suggeriti. In questo modo, ogni utente parte da una configurazione essenziale e personalizzabile.

# 16) Pulizia Start pins Windows 11
reg add "HKLMWIM_SOFTWAREMicrosoftPolicyManagercurrentdeviceStart" /v ConfigureStartPins /t REG_SZ /d "{`"pinnedList`":[{}]}" /f

Preparazione cartelle SetupScripts

Predisponiamo l’infrastruttura necessaria per eseguire script personalizzati durante il setup e al primo accesso. È un punto chiave per automatizzare ulteriori configurazioni.

# 17) Cartelle e script persistenti in SetupScripts
New-Item -ItemType Directory -Force "$MountWindowsSetupScripts" | Out-Null

Script FirstLogon.ps1

Questo script è eseguito al primo login dell’utente reale e completa la configurazione del sistema. Può riattivare servizi, applicare preferenze e rimuovere elementi residui.

# 18) FirstLogon.ps1: personalizzazione post-OOBE/utente reale
@'
# Personalizzazione primo logon

# Crea marker
New-Item -ItemType Directory -Force "C:ProgramDataCustomISO" | Out-Null
Set-Content -Path "C:ProgramDataCustomISOfirstlogon.txt" -Value "FirstLogon completato"

# Riabilita servizi Windows Update
Set-ItemProperty "HKLM:SYSTEMCurrentControlSetServicesBITS" -Name Start -Value 2 -ErrorAction SilentlyContinue
Set-ItemProperty "HKLM:SYSTEMCurrentControlSetServiceswuauserv" -Name Start -Value 3 -ErrorAction SilentlyContinue
Set-ItemProperty "HKLM:SYSTEMCurrentControlSetServicesUsoSvc" -Name Start -Value 3 -ErrorAction SilentlyContinue
Set-ItemProperty "HKLM:SYSTEMCurrentControlSetServicesWaaSMedicSvc" -Name Start -Value 3 -ErrorAction SilentlyContinue
Remove-Item "HKLM:SOFTWAREPoliciesMicrosoftWindowsWindowsUpdate" -Recurse -Force -ErrorAction SilentlyContinue

Start-Service BITS -ErrorAction SilentlyContinue
Start-Service wuauserv -ErrorAction SilentlyContinue
Start-Service UsoSvc -ErrorAction SilentlyContinue

# Imposta nome PC casuale
$random = -join ((65..90) + (48..57) | Get-Random -Count 6 | ForEach-Object {[char]$_})
$newName = "PC-$random"
Rename-Computer -NewName $newName -Force

# Explorer/user preferences
reg add "HKCUSoftwareMicrosoftWindowsCurrentVersionExplorerAdvanced" /v HideFileExt /t REG_DWORD /d 0 /f
reg add "HKCUSoftwareMicrosoftWindowsCurrentVersionExplorerAdvanced" /v Hidden /t REG_DWORD /d 1 /f

# Rimuove collegamenti indesiderati
Remove-Item "$env:USERPROFILEDesktopMicrosoft Edge.lnk" -Force -ErrorAction SilentlyContinue
'@ | Set-Content "$MountWindowsSetupScriptsFirstLogon.ps1" -Encoding UTF8

Personalizzazione profilo DefaultUser0

Come spiegato in precedenza, il profilo DefaultUser0 rappresenta la base da cui derivano tutti i nuovi utenti. Modificarlo offline significa applicare impostazioni uniformi e coerenti a ogni account creato successivamente.

# 19) Personalizzazione profilo Default: file e shortcut per ogni nuovo utente
New-Item -ItemType Directory -Force "$MountUsersDefaultDesktop" | Out-Null
New-Item -ItemType Directory -Force "$MountUsersDefaultAppDataRoamingMicrosoftWindowsStart MenuPrograms" | Out-Null

@'
ISO Windows 11 personalizzata.
Profilo Default modificato offline.
Le impostazioni verranno ereditate dai nuovi utenti creati durante OOBE.
'@ | Set-Content "$MountUsersDefaultDesktopLEGGIMI-CUSTOM-ISO.txt" -Encoding UTF8
# 20) Operazioni assimilabili a DefaultUser0:
# pre-creazione cartella DefaultUser0 solo come staging tecnico, non come account.
New-Item -ItemType Directory -Force "$MountUsersDefaultUser0AppDataLocalCustomStage" | Out-Null

@'
Questo contenuto serve solo come staging tecnico.
DefaultUser0 non dovrebbe rimanere come account operativo dopo OOBE.
'@ | Set-Content "$MountUsersDefaultUser0AppDataLocalCustomStagenote.txt" -Encoding UTF8

Pulizia attività pianificate

Rimuoviamo attività programmate in Windows 11 legate a telemetria, compatibilità e raccolta dati. Riduce i processi in background e migliora le prestazioni complessive.

# 21) Cleanup scheduled tasks indesiderati
$Tasks = "$MountWindowsSystem32Tasks"

Remove-Item "$TasksMicrosoftWindowsApplication ExperienceMicrosoft Compatibility Appraiser" -Force -ErrorAction SilentlyContinue
Remove-Item "$TasksMicrosoftWindowsApplication ExperienceProgramDataUpdater" -Force -ErrorAction SilentlyContinue
Remove-Item "$TasksMicrosoftWindowsCustomer Experience Improvement Program" -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item "$TasksMicrosoftWindowsWindows Error ReportingQueueReporting" -Force -ErrorAction SilentlyContinue
Remove-Item "$TasksMicrosoftWindowsInstallService" -Recurse -Force -ErrorAction SilentlyContinue

Scaricamento hive del registro e install.wim

Le sezioni del registro precedentemente montate, sono adesso correttamente smontate per evitare corruzioni dei dati e garantire che tutte le modifiche siano salvate.

# 22) Scarica hive offline
reg unload HKLMWIM_NTUSER
reg unload HKLMWIM_DEFAULT
reg unload HKLMWIM_SOFTWARE
reg unload HKLMWIM_SYSTEM

Tutte le modifiche apportate sono poi consolidate nell’immagine install.wim: è un passaggio critico perché senza di esso (commit) nessuna personalizzazione sarebbe conservata.

# 23) Commit install.wim
Dismount-WindowsImage -Path $Mount -Save

Modifica boot.wim e setup

Si interviene anche sull’ambiente di installazione (WinPE), assicurando coerenza tra setup e sistema finale, inclusi bypass hardware e driver.

# 24) Modifica boot.wim
$BootMount = "$WorkBootMount"
New-Item -ItemType Directory -Force $BootMount | Out-Null

# Legge l'edizione dall'indice install.wim scelto in precedenza
$ImageInfo = Get-WindowsImage `
  -ImagePath "$IsoRootsourcesinstall.wim" `
  -Index $Index

$EditionName = $ImageInfo.ImageName

# Mappa nomi immagine -> EditionID per ei.cfg
$EditionMap = @{
  "Windows 11 Home"                  = "Core"
  "Windows 11 Home N"                = "CoreN"
  "Windows 11 Home Single Language"  = "CoreSingleLanguage"
  "Windows 11 Education"             = "Education"
  "Windows 11 Education N"           = "EducationN"
  "Windows 11 Pro"                   = "Professional"
  "Windows 11 Pro N"                 = "ProfessionalN"
  "Windows 11 Pro Education"         = "ProfessionalEducation"
  "Windows 11 Pro Education N"       = "ProfessionalEducationN"
  "Windows 11 Pro for Workstations"  = "ProfessionalWorkstation"
  "Windows 11 Pro N for Workstations"= "ProfessionalWorkstationN"
  "Windows 11 Enterprise"            = "Enterprise"
  "Windows 11 Enterprise N"          = "EnterpriseN"
}

if (-not $EditionMap.ContainsKey($EditionName)) {
  throw "Edizione non riconosciuta: '$EditionName'. Aggiungi manualmente il mapping EditionID."
}

$EditionID = $EditionMap[$EditionName]

Write-Host "Indice selezionato: $Index"
Write-Host "Nome immagine: $EditionName"
Write-Host "EditionID per ei.cfg: $EditionID"

# Monta boot.wim index 2, cioè Windows Setup/WinPE
Mount-WindowsImage `
  -ImagePath "$IsoRootsourcesboot.wim" `
  -Index 2 `
  -Path $BootMount `
  -Optimize

# Inserisce LabConfig nel registro del Setup, non solo nell'immagine installata
reg load HKLMBOOT_SYSTEM "$BootMountWindowsSystem32configSYSTEM"

reg add "HKLMBOOT_SYSTEMSetupLabConfig" /v BypassTPMCheck /t REG_DWORD /d 1 /f
reg add "HKLMBOOT_SYSTEMSetupLabConfig" /v BypassSecureBootCheck /t REG_DWORD /d 1 /f
reg add "HKLMBOOT_SYSTEMSetupLabConfig" /v BypassRAMCheck /t REG_DWORD /d 1 /f
reg add "HKLMBOOT_SYSTEMSetupLabConfig" /v BypassCPUCheck /t REG_DWORD /d 1 /f
reg add "HKLMBOOT_SYSTEMSetupLabConfig" /v BypassStorageCheck /t REG_DWORD /d 1 /f

reg add "HKLMBOOT_SYSTEMControlSet001Serviceswuauserv" /v Start /t REG_DWORD /d 4 /f
reg add "HKLMBOOT_SYSTEMControlSet001ServicesUsoSvc" /v Start /t REG_DWORD /d 4 /f
reg add "HKLMBOOT_SYSTEMControlSet001ServicesWaaSMedicSvc" /v Start /t REG_DWORD /d 4 /f
reg add "HKLMBOOT_SYSTEMControlSet001ServicesBITS" /v Start /t REG_DWORD /d 4 /f

reg unload HKLMBOOT_SYSTEM

# Se hai esportato driver al punto 6, li inietta anche nel Setup PE
if (Test-Path $Drivers) {
  dism /English /Image:$BootMount /Add-Driver /Driver:$Drivers /Recurse
}

Dismount-WindowsImage -Path $BootMount -Save

# Crea ei.cfg per non chiedere più quale edizione installare
@"
[EditionID]
$EditionID
[Channel]
Retail
[VL]
0
"@ | Set-Content "$IsoRootsourcesei.cfg" -Encoding ASCII

Write-Host "Creato ei.cfg per edizione: $EditionID"

Crea file autounattend.xml

Questo passaggio permette di automatizzare l’intero processo OOBE, eliminando la necessità di input manuali e standardizzando il comportamento dell’installazione.

# 25) Crea autounattend.xml per OOBE

@'
<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">

  <settings pass="windowsPE">
    <component name="Microsoft-Windows-International-Core-WinPE"
      processorArchitecture="amd64"
      publicKeyToken="31bf3856ad364e35"
      language="neutral"
      versionScope="nonSxS"
      xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <SetupUILanguage>
        <UILanguage>it-IT</UILanguage>
      </SetupUILanguage>
      <InputLocale>it-IT</InputLocale>
      <SystemLocale>it-IT</SystemLocale>
      <UILanguage>it-IT</UILanguage>
      <UserLocale>it-IT</UserLocale>
    </component>

    <component name="Microsoft-Windows-Setup"
      processorArchitecture="amd64"
      publicKeyToken="31bf3856ad364e35"
      language="neutral"
      versionScope="nonSxS"
      xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <UserData>
        <AcceptEula>true</AcceptEula>
      </UserData>
    </component>
  </settings>

  <settings pass="specialize">
    <component name="Microsoft-Windows-Shell-Setup"
      processorArchitecture="amd64"
      publicKeyToken="31bf3856ad364e35"
      language="neutral"
      versionScope="nonSxS"
      xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <ComputerName>PC-AUTO</ComputerName>
    </component>
  </settings>

  <settings pass="oobeSystem">
    <component name="Microsoft-Windows-International-Core"
      processorArchitecture="amd64"
      publicKeyToken="31bf3856ad364e35"
      language="neutral"
      versionScope="nonSxS"
      xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <InputLocale>it-IT</InputLocale>
      <SystemLocale>it-IT</SystemLocale>
      <UILanguage>it-IT</UILanguage>
      <UserLocale>it-IT</UserLocale>
    </component>

    <component name="Microsoft-Windows-Shell-Setup"
      processorArchitecture="amd64"
      publicKeyToken="31bf3856ad364e35"
      language="neutral"
      versionScope="nonSxS"
      xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

      <OOBE>
        <HideEULAPage>true</HideEULAPage>
        <HideOnlineAccountScreens>true</HideOnlineAccountScreens>
        <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
        <NetworkLocation>Work</NetworkLocation>
        <ProtectYourPC>3</ProtectYourPC>
      </OOBE>

      <UserAccounts>
        <LocalAccounts>
          <LocalAccount wcm:action="add">
            <Name>admin</Name>
            <DisplayName>admin</DisplayName>
            <Group>Administrators</Group>
            <Password>
              <Value></Value>
              <PlainText>true</PlainText>
            </Password>
          </LocalAccount>
        </LocalAccounts>
      </UserAccounts>

      <AutoLogon>
        <Enabled>true</Enabled>
        <Username>admin</Username>
        <LogonCount>1</LogonCount>
        <Password>
          <Value></Value>
          <PlainText>true</PlainText>
        </Password>
      </AutoLogon>

      <FirstLogonCommands>
        <SynchronousCommand wcm:action="add">
          <Order>1</Order>
          <Description>Custom First Logon Script</Description>
          <CommandLine>powershell.exe -ExecutionPolicy Bypass -NoProfile -File C:WindowsSetupScriptsFirstLogon.ps1</CommandLine>
        </SynchronousCommand>
      </FirstLogonCommands>

    </component>
  </settings>

</unattend>
'@ | Set-Content "$IsoRootautounattend.xml" -Encoding UTF8

Rimozione cartelle opzionali

Si eliminano componenti non essenziali per ridurre dimensioni e complessità della ISO finale.

# 26) Rimuovi support folder opzionale
Remove-Item "$IsoRootsupport" -Recurse -Force -ErrorAction SilentlyContinue

Creazione file ISO avviabile aggiornato

L’ultima fase ricompone tutti i file modificati in una nuova immagine ISO avviabile, compatibile con sistemi BIOS e UEFI, pronta per essere utilizzata nelle installazioni reali. Il file oscdimg.exe per la generazione del file ISO è scaricato con un metodo ispirato a Rufus direttamente dai server Microsoft.

# 27) Ricrea ISO UEFI/BIOS avviabile con oscdimg

$OscdimgUrl = "https://msdl.microsoft.com/download/symbols/oscdimg.exe/688CABB065000/oscdimg.exe"
$Oscdimg = Join-Path $Work "oscdimg.exe"

# Scarica oscdimg nella cartella $Work se non esiste già
if (-not (Test-Path $Oscdimg)) {
    Invoke-WebRequest -Uri $OscdimgUrl -OutFile $Oscdimg
}

# Verifica che oscdimg sia disponibile in $Work
if (-not (Test-Path $Oscdimg)) {
    throw "oscdimg.exe non trovato in $Work"
}

# Esegue oscdimg dalla cartella $Work
& $Oscdimg `
  -m `
  -o `
  -u2 `
  -udfver102 `
  -bootdata:2#p0,e,b"$IsoRootbootetfsboot.com"#pEF,e,b"$IsoRootefimicrosoftbootefisys.bin" `
  -l"WIN11_CUSTOM" `
  $IsoRoot `
  $OutISO

Windows 11 installato con ISO personalizzata

Configurazione automatica iniziale: nome PC e account amministratore

Al termine dell’installazione, il sistema esegue automaticamente le operazioni previste negli script di primo avvio. In particolare, il nome del PC è modificato dopo il riavvio successivo al completamento dell’installazione. È quindi bene ricordarsi di effettuare un riavvio subito dopo l’ingresso nel desktop di Windows 11.

Durante la procedura è inoltre creato automaticamente un account locale admin senza password. Per motivi di sicurezza, è fondamentale assegnare una password subito dopo il primo accesso. L’operazione può essere eseguita rapidamente aprendo una finestra del terminale (Prompt dei comandi o PowerShell) ed eseguendo quanto segue:

net user admin *

Il sistema richiede l’inserimento della nuova password, completando così la messa in sicurezza dell’account amministrativo.

Conclusioni

DefaultUser0 è una traccia tecnica preziosa del momento in cui Windows 11 passa da semplice immagine di installazione a sistema operativo pronto per il primo utente reale.

Comprendere questa fase permette di spostare la personalizzazione molto più a monte: non dopo l’installazione, ma prima che Windows sia effettivamente configurato sulla macchina.

Il vantaggio principale è la ripetibilità. Una volta creata, la ISO personalizzata consente di installare Windows 11 con un’impostazione coerente, pulita e già orientata alle proprie esigenze, senza dover applicare ogni volta gli stessi script manuali dopo il primo avvio.

Resta però fondamentale procedere con consapevolezza: ogni modifica applicata offline diventa parte integrante dell’immagine finale. Per questo motivo è consigliabile testare sempre la ISO in macchina virtuale prima di usarla su sistemi reali, verificare che l’edizione scelta sia corretta e mantenere una copia pulita dell’immagine originale.

Powered by WPeMatico

Di admin