lunedì 18 agosto 2025

Windows: Robocopy

La gestione dei dati è fondamentale, che si tratti di un semplice backup di documenti personali o della migrazione di un'intera infrastruttura aziendale, la capacità di spostare e copiare file in modo efficiente, affidabile e veloce è cruciale. Sebbene l'interfaccia grafica di Esplora file sia più che sufficiente per le attività quotidiane, Windows offre uno strumento a riga di comando che rappresenta la scelta preferita per i professionisti IT e gli utenti avanzati: Robocopy.

Robocopy, abbreviazione di "Robust File Copy", è un'utility a riga di comando integrata in tutti i sistemi operativi Windows moderni.  Il suo scopo principale è quello di copiare file e directory da una posizione all'altra, ma con una serie di funzionalità avanzate che lo distinguono da comandi più semplici come `copy` o `xcopy`. La sua "robustezza" deriva dalla capacità di riprendere le operazioni interrotte, di gestire la copia di permessi e attributi, e di operare in modalità specchio (mirroring) per sincronizzare il contenuto di due cartelle in modo bidirezionale.

I vantaggi nell'utilizzo di Robocopy sono
  • Robustezza: Se la copia viene interrotta a causa di un problema di rete o di un errore, Robocopy può riprendere da dove si era fermato, senza dover ricominciare tutto da capo. L'opzione `/Z` (restartable mode) è il cuore di questa funzionalità.
  • Velocità: Con l'opzione di copia multi-thread, Robocopy può copiare file in parallelo, migliorando notevolmente la velocità di trasferimento, specialmente su collegamenti veloci e con tanti file piccoli.
  • Controllo Granulare: Si ha un controllo granulare su cosa viene copiato, escluso o modificato. É possibile specificare se copiare sottocartelle vuote, escludere file per nome o dimensione, o mantenere attributi e permessi.
  • Automazione: Essendo un'utility a riga di comando, Robocopy si presta perfettamente all'uso in script e file batch per automatizzare le operazioni di backup e sincronizzazione, rendendole ripetibili e programmate.

Per utilizzare Robocopy si consiglia di aprire il Prompt dei comandi con privilegi amministrativi. L'uso dei privilegi amministrativi garantisce che Robocopy possa superare eventuali restrizioni di accesso ai file (a meno che non si utilizzino opzioni specifiche come `/b` per la modalità backup).

Sintassi e Parametri Fondamentali

La sintassi di base di robocopy è semplice ma potente:
robocopy <origine> <destinazione> [<file>[ ...]] [<opzioni>]
  • <origine>: Specifica il percorso della directory da cui vuoi copiare.
  • <destinazione>: Specifica il percorso della directory dove vuoi copiare i file.
  • [<file>[ ...]]: Il nome del file o dei file da copiare. I caratteri jolly (`*` e `?`) sono supportati. Se omesso, Robocopy copierà tutti i file (`*.*`).
  • [<opzioni>]: Le opzioni di comando che definiscono il comportamento di Robocopy.

Per esempio, per copiare il file `report.zip` dalla cartella `c:\reports` alla condivisione di rete `\\backup\reports` in modalità multi-thread e riavviabile, il comando sarà:
robocopy c:\reports "\\backup\reports" report.zip /mt /z


Opzioni di Copia Essenziali


Opzione Descrizione
/s
Copia le sottodirectory, ma esclude quelle vuote.
/e
Copia le sottodirectory, incluse quelle vuote. Questa è l'opzione più comune per la copia completa di una cartella.
/lev:<n>
Copia solo i primi n livelli dell'albero delle directory di origine.
/z
Copia i file in modalità riavviabile. In modalità riavviabile, in caso di interruzione di una copia di file, robocopy può riprendere la posizione in cui è stata interrotta invece di ricopiare l'intero file.
/b
Copia i file in modalità di backup. In modalità di backup robocopy esegue l'override delle impostazioni di autorizzazione per file e cartelle (ACL), che potrebbero altrimenti bloccare l'accesso.
/zb
Copia i file in modalità riavviabile. Se l'accesso ai file viene negato, passa alla modalità di backup.
/j
Copia con I/O senza buffer (scelta consigliata per file di grandi dimensioni).
/efsraw
Copia tutti i file crittografati in modalità RAW EFS.
/j
Copia con I/O senza buffer (scelta consigliata per file di grandi dimensioni).
/copy:<copyflags>
Specifica le proprietà del file da copiare. I valori validi per questa opzione sono:
D - Data
A - Attributes
T - Time stamps
X - Skip alt data streams
S - NTFS access control list (ACL)
O - Owner information
U - Auditing information

Il valore predefinito per l'opzione /COPY è DAT (dati, attributi e timestamp). Il flag X viene ignorato se si utilizza /B o /ZB.
/dcopy:<copyflags>
Specifica cosa copiare nelle directory. I valori validi per questa opzione sono:
D - Data
A - Attributes
T - Time stamps
E - Extended attribute
X - Skip alt data streams
Il valore predefinito per questa opzione è DA (dati e attributi).
/sec
Copia i file con sicurezza (equivalente a /copy:DATS).
/copyall
Copia tutte le informazioni del file (equivalente a /copy:DATSOU).
/nocopy
Non copia le informazioni sui file (utile con /purge).
/secfix
Consente di correggere la sicurezza in tutti i file, anche quelli ignorati.
Quando si utilizza l'opzione di copia /secfix, specificare il tipo di informazioni di sicurezza che si desidera copiare, utilizzando una delle seguenti opzioni di copia aggiuntive:
/copyall
/copy:o
/copy:s
/copy:u
/sec
/timfix
Consente di correggere gli orari in tutti i file, anche quelli ignorati.
/purge
Elimina i file e le directory di destinazione che non esistono più nell'origine. Utilizzando questa opzione con l'opzione /e e una directory di destinazione, è possibile evitare la sovrascrittura delle impostazioni di sicurezza della directory di destinazione.
/mir
Esegue il mirroring di una struttura di directory (equivalente a /e più /purge). Utilizzando questa opzione con l'opzione /e e una directory di destinazione, sovrascrive le impostazioni di sicurezza della directory di destinazione.
/mov
Sposta i file ed elimina i file dall'origine dopo la copia.
/move
Sposta i file e le directory ed elimina i file dall'origine dopo la copia.
/a+:[RASHCNET]
Aggiunge gli attributi specificati ai file copiati. I valori validi per questa opzione sono:
R - Read only
A - Archive
S - System
H - Hidden
C - Compressed
N - Not content indexed
E - Encrypted
T - Temporary
/a-:[RASHCNETO]
Rimuove gli attributi specificati dai file copiati. I valori validi per questa opzione sono:
R - Read only
A - Archive
S - System
H - Hidden
C - Compressed
N - Not content indexed
E - Encrypted
T - Temporary
O - Offline
/create
Crea solo un albero di directory e file di lunghezza zero.
/fat
Crea file di destinazione usando solo nomi di file FAT di lunghezza di 8,3 caratteri.
/256
Disattiva il supporto per i percorsi con più di 256 caratteri.
/mon:<n>
Monitora la fonte e si riavvia quando vengono rilevate più di n modifiche.
/mot:<m>
Monitora la fonte e si riavvia dopo m minuti se vengono rilevate modifiche.
/rh:hhmm-hhmm
Specifica i tempi di esecuzione in cui è possibile avviare nuove copie.
/pf
Controlla i tempi di esecuzione per ogni file (non per passaggio).
/ipg:<m>
Specifica il divario tra pacchetti per liberare la larghezza di banda nelle linee lente.
/sj
Copia le giunzioni (collegamenti flessibili) nel percorso di destinazione anziché le destinazioni di collegamento.
/sl
Non seguire i collegamenti simbolici e creare invece una copia del collegamento.
/mt:<m>
Crea copie multithread con n thread. n deve essere un numero intero compreso tra 1 e 128. Il valore predefinito per n è 8. Per ottenere prestazioni migliori, reindirizzare l'output utilizzando l'opzione /log.
Il parametro /mt non può essere utilizzato con i parametri /ipg e /efsraw.
/nodcopy
Non copia le informazioni della directory (viene eseguita l'operazione predefinita /dcopy:DA).
/nooffload
Copia i file senza usare il meccanismo di offload copia di Windows.
/compress
Richiede la compressione di rete durante il trasferimento di file, se applicabile.
/sparse:<y|n>
Abilita o disabilita la conservazione dello stato sparse dei file durante il processo di copia. Se non viene selezionata alcuna opzione, l'impostazione predefinita è sì (abilitato).
/noclone
Non tenta di bloccare la clonazione come ottimizzazione.


Copiare le opzioni di limitazione dei file

Queste opzioni di limitazione vengono usate per specificare la larghezza di banda di I/O massima che Robocopy consente di usare in byte al secondo.  Se non si specifica il valore in byte al secondo, è possibile utilizzare numeri interi se si specificano k, m o g. La larghezza di banda I/O minima limitata è 524288 byte anche se si specifica un valore inferiore.
Opzione Descrizione
/iomaxsize:<n>[kmg]
La dimensione massima richiesta per ciclo di lettura/scrittura in kilobyte, megabyte o gigabyte.
/iorate:<n>[kmg]
La velocità di I/O richiesta in kilobyte, megabyte o gigabyte al secondo.
/threshold:<n>[kmg]
La soglia della dimensione del file per la limitazione in kilobyte, megabyte o gigabyte


Opzioni di selezione file

Opzione Descrizione
/a
Copia solo i file per i quali è impostato l'attributo Archivio.
/m
Copia solo i file per i quali è impostato l'attributo Archivio e reimposta l'attributo Archivio.
/ia:[RASHCNETO]
Include solo i file per i quali sono impostati gli attributi specificati. I valori validi per questa opzione sono:
R - Read only
A - Archive
S - System
H - Hidden
C - Compressed
N - Not content indexed
E - Encrypted
T - Temporary
O - Offline
/xa:[RASHCNETO]
Esclude solo i file per i quali sono impostati gli attributi specificati. I valori validi per questa opzione sono:
R - Read only
A - Archive
S - System
H - Hidden
C - Compressed
N - Not content indexed
E - Encrypted
T - Temporary
O - Offline
/xf [ ...]
Esclude i file che corrispondono ai nomi o ai percorsi specificati. Sono supportati i caratteri jolly (* e ?).
/Xd [ ...]
Esclude le directory che corrispondono ai nomi e ai percorsi specificati.
/xc
Esclude i file esistenti con lo stesso timestamp, ma dimensioni di file diverse.
/xn
I file di directory di origine più recenti rispetto alla destinazione vengono esclusi dalla copia.
/xo
I file della directory di origine precedente a quella di destinazione vengono esclusi dalla copia.
/xx
Esclude file e directory aggiuntivi presenti nella destinazione, ma non nell'origine. L'esclusione di file aggiuntivi non elimina i file dalla destinazione.
/xl
Esclude file e directory "solitari" presenti nell'origine ma non nella destinazione. L'esclusione di file solitari impedisce l'aggiunta di nuovi file alla destinazione.
/im
Includere i file modificati (tempi di modifica diversi).
/is
Include gli stessi file. Gli stessi file sono identici per nome, dimensioni, orario e tutti gli attributi.
/it
Include file "modificati". I file modificati hanno lo stesso nome, dimensioni e orario, ma attributi diversi.
/max:<n>
Specifica la dimensione massima del file (per escludere i file più grandi di n byte).
/min:<n>
Include file "modificati". I file modificati hanno lo stesso nome, dimensioni e orario, ma attributi diversi.
/maxage:<n>
Specifica l'età massima dei file per escludere i file più vecchi di n giorni o una data basata sull'ultima modifica dei file.
/minage:<n>
Specifica l'età minima dei file per escludere quelli più recenti di n giorni o una data basata sull'ultima modifica dei file.
/maxlad:<n>
Specifica la data massima dell'ultimo accesso (esclude i file inutilizzati da n).
/minlad:<n>
Specifica la data minima dell'ultimo accesso (esclude i file utilizzati dopo n). Se n è inferiore a 1900, n specifica il numero di giorni. Altrimenti, n specifica una data nel formato YYYYMMDD.
/xj
Esclude i punti di giunzione, che vengono normalmente inclusi per impostazione predefinita.
/fft
Presuppone i tempi dei file FAT (precisione di due secondi).
/dst
Compensa le differenze di tempo di un'ora DST.
/xjd
Esclude i punti di giunzione per le directory.
/xjf
Esclude i punti di giunzione per i file.


Opzioni di riprova

Opzione Descrizione
/r:<n>
Specifica il numero di tentativi per le copie non riuscite. Il valore predefinito di n è 1.000.000 (un milione di tentativi).
/w:<n>
Specifica il tempo di attesa tra i tentativi, in secondi. Il valore predefinito di n è 30 (tempo di attesa 30 secondi).
/reg
Salva i valori specificati nelle opzioni /r e /w come impostazioni predefinite nel Registro di sistema.
/tbd
Specifica che il sistema attende che i nomi delle condivisioni vengano definiti (errore di ripetizione del tentativo 67).
/lfsm
Funziona in modalità di spazio libero insufficiente che consente la copia, la pausa e la ripresa
/lfsm:<n>[kmg]
Specifica le dimensioni del pavimento in n kilobyte, megabyte o gigabyte.

Opzioni di registrazione (Log)
L'opzione di logging è cruciale per la verifica e l'automazione.

Opzione Descrizione
/l
Specifica che i file devono essere solamente elencati (e non copiati, eliminati o contrassegnati come timestamp).
/x
Segnala tutti i file aggiuntivi, non solo quelli selezionati.
/v
Produce un output dettagliato e mostra tutti i file ignorati.
/ts
Include i timestamp dei file di origine nell'output.
/fp
Include i nomi completi dei percorsi dei file nell'output.
/bytes
Stampa le dimensioni come byte.
/ns
Specifica che le dimensioni dei file non devono essere registrate.
/nc
Specifica che le classi dei file non devono essere registrate.
/nfl
Specifica che i nomi dei file non devono essere registrati.
/ndl
Specifica che i nomi di directory non devono essere registrati.
/np
Specifica di non visualizzare lo stato di avanzamento dell'operazione di copia (il numero di file o directory copiati finora).
/eta
Mostra il tempo stimato di arrivo (ETA) dei file copiati.
/log:<logfile>
Scrive l'output di stato nel file di log sovrascrivendo il file di log esistente.
/log+:<logfile>
Scrive l'output dello stato nel file di registro (aggiunge l'output al file di registro esistente).
/unilog:<logfile>
Scrive l'output dello stato nel file di registro come testo Unicode (sovrascrive il file di registro esistente).
/unilog+:<logfile>
Scrive l'output dello stato nel file di registro come testo Unicode (aggiunge l'output al file di registro esistente).
/tee
Scrive l'output dello stato nella finestra della console e nel file di registro.
/njh
Specifica che non è presente alcuna intestazione del processo.
/njs
Specifica che non è presente alcun riepilogo del lavoro.
/unicode
Visualizza l'output dello stato come testo Unicode.

Opzioni processo (Job)

Opzione Descrizione
/job:<jobname>
Specifica che i parametri devono essere derivati dal file di processo denominato. Per eseguire /job:jobname, è prima necessario eseguire il parametro /save:jobname per creare il file di processo.
/save:<jobname>
Specifica che i parametri devono essere salvati nel file di processo denominato. Questa operazione deve essere eseguita prima di eseguire /job:jobname. Tutte le opzioni di copia, ripetizione e registrazione devono essere specificate prima di questo parametro.
/quit
Esce dopo l'elaborazione della riga di comando (per visualizzare i parametri).
/nosd
Indica che non è specificata alcuna directory di origine.
/nodd
Indica che non è specificata alcuna directory di destinazione.
/if
Include i file specificati.


Codici di Uscita (Return Codes)

Al termine di un'operazione, Robocopy restituisce un codice numerico che può essere catturato da script batch per prendere decisioni.
Valore Descrizione
0
Nessun file copiato. Non è stato rilevato alcun errore. Nessun file non corrispondente. I file esistono già nella directory di destinazione, pertanto, l'operazione di copia è stata ignorata.
1
Tutti i file sono stati copiati correttamente.
2
Nella directory di destinazione sono presenti alcuni file aggiuntivi che non sono presenti nella directory di origine. Nessun file copiato.
3
Alcuni file sono stati copiati. Erano presenti file aggiuntivi. Non è stato rilevato alcun errore.
5
Alcuni file sono stati copiati. Alcuni file non corrispondono. Non è stato rilevato alcun errore.
6
Esistono file aggiuntivi e file non corrispondenti. Non sono stati copiati file e non sono stati rilevati errori, il che significa che i file esistono già nella directory di destinazione.
7
I file sono stati copiati, erano presenti una mancata corrispondenza dei file e file aggiuntivi.
8
Diversi file non sono stati copiati.

Qualsiasi valore uguale o maggiore di 8 indica che si è verificato almeno un errore durante l'operazione di copia.

Note

  • L'utilizzo di /PURGE o /MIR nella directory radice del volume in precedenza causava l'applicazione dell'operazione richiesta da parte di robocopy anche ai file all'interno della directory System Volume Information. Questo non è più il caso come se sia specificato, robocopy ignora tutti i file o le directory con tale nome nelle directory di origine e di destinazione di primo livello della sessione di copia.
  • La classificazione dei file modificati si applica solo quando i file system di origine e di destinazione supportano timestamp di modifica, ad esempio NTFS, e i file di origine e di destinazione hanno tempi di modifica diversi, ma per il resto sono gli stessi. Questi file non vengono copiati per impostazione predefinita. Specificare /IM per includerli.
  • Il flag /DCOPY:E richiede che venga tentata la copia estesa degli attributi per le directory. Robocopy continua l'operazione di copia anche se non è stato possibile copiare le EA di una directory. Questo flag non è incluso in /COPYALL.
  • Se si specifica /IoMaxSize o /IoRate, robocopy abilita la limitazione dei file di copia per ridurre il carico del sistema. Entrambi possono essere modificati in valori ottimali e parametri di copia, ma il sistema e robocopy sono autorizzati a modificarli in base ai valori consentiti in funzione delle esigenze.
  • Se si utilizza /Threshold, viene specificata una dimensione minima del file per l'attivazione della limitazione. I file al di sotto delle dimensioni non vengono limitati. I valori per tutti e tre i parametri possono essere seguiti da un carattere di suffisso facoltativo, ad esempio [KMG] (kilobyte, megabyte, gigabyte).
  • L'utilizzo di /LFSM richiede che robocopy funzioni in "modalità spazio libero insufficiente". In questa modalità robocopy si sospende ogni volta che una copia di file causa lo spazio disponibile del volume di destinazione al di sotto di un valore "floor". Questo valore può essere specificato in modo esplicito utilizzando il flag /LFSM:n[KMG].
  • Se si specifica /LFSM senza alcun valore di piano esplicito, il piano viene impostato su 10% delle dimensioni del volume di destinazione. La modalità di spazio libero insufficiente non è compatibile con /MT e /EFSRAW.


Esempi


Esempio 1 - Copia Base con Log
Questo comando copia tutti i file e le sottodirectory, comprese quelle vuote, da una cartella di origine a una di destinazione. Inoltre, crea un file di log per registrare l'operazione, permettendo di verificarne l'integrità successivamente.
robocopy C:\Users\Admin\Records D:\Backup /E /ZB /LOG:C:\Logs\Backup.log
  • robocopy C:\Users\Admin\Records D:\Backup: Indica l'origine (C:\...) e la destinazione (D:\...).
  • /E: Copia le sottodirectory, comprese quelle vuote.
  • /ZB: Usa la modalità di backup. Se l'utente non ha i permessi completi, prova a usare la modalità di backup per garantire la copia di tutti i file.
  • /LOG:C:\Logs\Backup.log: Crea un file di log chiamato Backup.log nel percorso specificato. Se il file esiste, lo sovrascrive. Usa /LOG+ per aggiungere al file di log esistente.

Esempio 2 - Mirroring (Sincronizzazione)
Questa opzione esegue il "mirroring" di una cartella, rendendo la destinazione una copia esatta dell'origine. I file nella destinazione che non esistono nell'origine vengono eliminati, garantendo una sincronizzazione perfetta.
robocopy C:\Users\Admin\Records D:\Backup /MIR /R:2 /W:5 /LOG:C:\Logs\Backup.log
  • /MIR: Esegue il mirroring. Attenzione: questo parametro elimina i file nella destinazione che non sono presenti nell'origine.
  • /R:2: Imposta 2 tentativi in caso di errori di copia.
  • /W:5: Imposta un'attesa di 5 secondi tra i tentativi.

Esempio 3 - Copia con Multithreading
Questo comando copia file e sottodirectory non vuote, mantenendo i metadati originali (data, attributi, timestamp). L'uso del multithreading accelera notevolmente il processo, specialmente con un gran numero di file piccoli.
robocopy C:\Users\Admin\Records D:\Backup /S /E /COPY:DAT /MT:16 /LOG:C:\Logs\Backup.log
  • /S: Copia le sottodirectory, ma non quelle vuote.
  • /COPY:DAT: Preserva i dati (D), gli attributi (A) e i timestamp (T) dei file.
  • /MT:16: Utilizza 16 thread per la copia. Si possono specificare da 1 a 128 thread.

Esempio 4 -  Spostamento di File (Taglia e Incolla)
A differenza della copia, lo spostamento sposta i file e le cartelle dall'origine alla destinazione. Questa opzione è utile per trasferire dati e liberare spazio nell'origine.
robocopy C:\Users\Admin\Records D:\Backup /S /MAXAGE:7 /MOV /LOG:C:\Logs\Backup.log
  • /MOV: Sposta i file, cancellandoli dall'origine dopo la copia.
  • /MAXAGE:7: Sposta solo i file che sono stati modificati negli ultimi 7 giorni.

Esempio 5 - Sincronizzazione Aggressiva
Questo comando combina l'opzione di eliminazione di file obsoleti (/PURGE) con la visualizzazione di un tempo stimato per ogni file (/ETA). È un'opzione di sincronizzazione più aggressiva del mirroring.
robocopy C:\Users\Admin\Records D:\Backup /ETA /PURGE /LOG:C:\Logs\Backup.log
  • /PURGE: Elimina file e directory dalla destinazione se non esistono più nell'origine. È simile a /MIR ma non copia i permessi di sicurezza dei file.
  • /ETA: Mostra il tempo stimato per il completamento della copia per ogni file.

Esempio 6 - Limitazione della Velocità di I/O
Questo è utile per evitare che il processo di copia sovraccarichi la rete o il disco, rendendolo più gestibile in contesti dove la banda è limitata.
robocopy C:\Records D:\Backup /iorate:1m
  • /iorate:1m: Limita la velocità di I/O a 1 megabyte al secondo. Si possono usare vari suffissi (K per kilobyte, M per megabyte, G per gigabyte).

Esempio 7 - Evitare la Copia di File Esistenti
Questo comando è utile per un aggiornamento selettivo. Robocopy ignora i file che esistono già nella destinazione, indipendentemente dalla loro data di modifica.
robocopy C:\Source C:\Destination /XC /XN /XO
  • /XC: Esclude i file che sono cambiati (stesso nome, contenuto diverso).
  • /XN: Esclude i file nuovi (esistono nella sorgente ma non nella destinazione).
  • /XO: Esclude i file obsoleti (esistono nella destinazione ma non nella sorgente).



sabato 16 agosto 2025

MS Excel: Aggiungere una mappa dinamica ai dati di una tabella

Questo articolo illustra la procedura per creare una mappa interattiva collegata a una tabella in Excel. Supponiamo di avere una tabella con dei dati come quella mostrata in FIG 1.
Tabella Excel
FIG 1 - Tabella Excel

Per convertire il set di dati in una tabella, selezionare una qualsiasi cella al suo interno e premere la combinazione di tasti CTRL+T. Nella finestra di dialogo Crea tabella, verificare che l'opzione Tabella con intestazioni sia spuntata e che l'intervallo di dati sia corretto, quindi fare clic su OK.
Posizione dei dati per la tabella
FIG 2 - Posizione dei dati per la tabella
Per inserire un filtro dati, cliccare su Inserisci filtro dei dati, selezionare il campo Stato (che corrisponde alla prima colonna della tabella) e fare clic su OK.

Inserisci filtro dei dati
FIG 3 - Inserisci filtro dei dati

Posizionare il filtro dati sopra la tabella e impostare il numero di colonne a 3 tramite l'apposita casella. Ciò assicurerà che il filtro si allinei visivamente con la larghezza della tabella.
Filtro
FIG 4 - Filtro
Dal menu Inserisci selezionare Mappa. Assicurarsi che, nella tabella, sia selezionata l'intestazione Guadagni (per visualizzarla all'interno della mappa).
Mappa
FIG 5 - Mappa

A questo punto selezionando uno degli stati nel filtro dati, la mappa si aggiornerà dinamicamente, visualizzando lo stato selezionato e i relativi dati della colonna Guadagni della tabella.
Filtro Mappa
FIG 6 - Filtro Mappa






martedì 12 agosto 2025

Windows: Installazione personalizzata di Windows con UnattendedWinstall

Nel panorama delle soluzioni per la personalizzazione e l'automazione dell'installazione di Windows, strumenti come Rufus e FlyBy11 hanno semplificato l'aggiramento dei requisiti di Windows 11 o la gestione di installazioni rapide. Tuttavia, per professionisti IT, system integrator e utenti avanzati che necessitano di un controllo granulare e di un'automazione sofisticata, UnattendedWinstall emerge come una risorsa open source di notevole interesse. Disponibile su GitHub all'indirizzo https://github.com/memstechtips/UnattendedWinstall, questo progetto si posiziona come una soluzione robusta per chi desidera plasmare l'ambiente Windows in base a esigenze specifiche, superando le limitazioni degli strumenti più semplici.
UnattendedWinstall
FIG 1 - UnattendedWinstall


Fondamenti e funzionamento

UnattendedWinstall sfrutta le funzionalità ufficialmente supportate da Microsoft per modificare il comportamento dell'installazione di Windows direttamente sul supporto di installazione. Il cuore di questa metodologia risiede nell'utilizzo dei "file di risposta" (unattend.xml), che consentono di automatizzare e personalizzare un'ampia gamma di parametri durante il processo di setup. Questi file possono essere applicati alle immagini ISO ufficiali di Windows, garantendo una compatibilità intrinseca con il sistema operativo. Lo sviluppatore ha confermato il successo dei test su Windows 10 versione 22H2 e Windows 11 versione 24H2, con un impegno a mantenere la compatibilità anche in caso di future modifiche alla procedura di installazione da parte di Microsoft.

Capacità di personalizzazione avanzata

Le capacità di UnattendedWinstall vanno ben oltre la semplice automazione. Questo strumento permette di:
  • Aggirare i requisiti di sistema di Windows 11: Ideale per l'installazione su hardware legacy o non ufficialmente supportato.
  • Saltare la creazione dell'account Microsoft (MSA): Un'opzione cruciale per ambienti aziendali o per utenti che preferiscono account locali.
  • Disabilitare componenti critici: Permette la disattivazione di Windows Defender e del Controllo dell'account utente (UAC) per ambienti controllati o test.
  • Gestione delle funzionalità AI: Consente di disabilitare funzionalità basate sull'intelligenza artificiale come Copilot e Recall, fornendo un maggiore controllo sulla privacy e sulle risorse di sistema.
  • Pulizia delle applicazioni predefinite: Rimuove le applicazioni ritenute superflue, lasciando solo un set minimo essenziale (Microsoft Edge, Blocco note e Calcolatrice) per un sistema più snello.
  • Ottimizzazioni di sistema: Include l'installazione dei soli aggiornamenti di sicurezza, modifiche al Registro di sistema per disattivare la telemetria, la disattivazione di attività pianificate non essenziali e una configurazione dei servizi di sistema mirata al miglioramento delle prestazioni complessive.

Architettura e implementazione

La flessibilità di UnattendedWinstall deriva dalla sua struttura personalizzabile. Le modifiche vengono implementate agendo direttamente sul file autounattend.xml, che deve essere posizionato nella directory principale del supporto di installazione di Windows. Durante il setup, il sistema rileva e applica automaticamente le istruzioni contenute in questo file, garantendo un'installazione coerente e preconfigurata.

UnattendedWinstall non si limita alle nuove installazioni; lo script 
UWScript.ps1 può essere applicato anche su installazioni di Windows già attive. Questa funzionalità è preziosa per correggere modifiche introdotte da aggiornamenti o per ripristinare impostazioni personalizzate che potrebbero essere state sovrascritte. Tuttavia, è fortemente consigliato testare lo strumento in ambienti virtuali prima di implementarlo su hardware fisico per mitigare qualsiasi rischio.

Strumento per professionisti

UnattendedWinstall non è rivolto all'utenza comune. Chi cerca una soluzione rapida per installare Windows 11 su hardware non supportato o per apportare modifiche minori troverà strumenti come Rufus o WinAero Tweaker più accessibili e immediati.

Al contrario, UnattendedWinstall rappresenta una scelta estremamente efficiente per chi installa regolarmente Windows 10 o 11 su un elevato numero di sistemi. La sua capacità di offrire un livello di controllo senza precedenti su installazioni su larga scala, combinata con la sua natura flessibile, automatizzata e facilmente replicabile, lo rende indispensabile per la gestione di parchi macchine estesi. Richiede, tuttavia, una comprensione approfondita della struttura dei file di risposta e una certa dimestichezza con l'ambiente di installazione di Windows. Sebbene il processo di configurazione sia un'operazione una tantum, la sua efficacia dipende dalla precisione con cui viene preparato e adattato alle esigenze specifiche.


Integrazione e utilizzo semplificato con WIMutil

UnattendedWinstall si presenta come una semplice coppia di file (autounattend.xml e UWScript.ps1) da integrare nel supporto di installazione di Windows. Per facilitare questo compito, lo sviluppatore suggerisce l'utilizzo di WIMutil (https://github.com/memstechtips/WIMUtil), un semplice script automatizzato. WIMutil offre una procedura guidata che accompagna l'utente passo dopo passo nella selezione dell'immagine ISO di partenza (o nel download diretto dal sito Microsoft), nell'integrazione dei file aggiuntivi di UnattendedWinstall e nella creazione di una nuova immagine binaria, sfruttando il popolare tool open source Ventoy. Questo approccio semplifica notevolmente il processo di creazione di un supporto di installazione Windows altamente personalizzato e automatizzato.







martedì 5 agosto 2025

Windows 11: Esportare il layout del menu Start

L'introduzione di Windows 11 ha portato un'interfaccia utente rinnovata, incluso un menu Start centralizzato e preconfigurato. Sebbene l'impostazione predefinita possa essere adatta per gran parte degli utenti, ci sono contesti, come quello aziendale, in cui è necessario procedere ad alcune personalizzazione al fine di offrire un'esperienza utente coerente e controllata, con accesso rapido alle applicazioni aziendali essenziali, anziché a software non correlati al lavoro.
 
Contrariamente alla credenza comune che la personalizzazione avanzata del menu Start sia una prerogativa esclusiva di Windows 11 Enterprise, è possibile implementare una configurazione standardizzata anche nelle versioni Home e Pro. Questo articolo illustra come creare e distribuire un layout del menu Start personalizzato per tutti gli utenti, sia nuovi che esistenti, garantendo uniformità e ottimizzando l'ambiente di lavoro.
Menu Start
FIG 1 - Menu Start


Il layout del menu Start di Windows 11 viene salvato in un file con estensione .bin, situato nella cartella dei dati locali dell'utente ( %localappdata%). Questo file agisce come un modello che può essere replicato su più profili utente, offrendo un punto di partenza uniforme. È fondamentale sottolineare che questa operazione non impedisce agli utenti di personalizzare ulteriormente il proprio menu Start in seguito, ma assicura che al primo accesso trovino le applicazioni aziendali desiderate già a portata di mano.

È importante notare che la denominazione del file .bin è cambiata con gli aggiornamenti del sistema operativo:
  • start.bin
    Utilizzato nelle versioni iniziali di Windows 11 (21H2 e precedenti).
  • start2.bin
    Utilizzato a partire da Windows 11 versione 22H2.

Prima di procedere con l'esportazione, è necessario preparare il layout del menu Start su un computer "modello". Aprire il menu Start e rimuovere tutte le app indesiderate. Successivamente, aggiungere le applicazioni aziendali necessarie. Per una migliore organizzazione, è possibile creare gruppi di applicazioni (cartelle) semplicemente trascinando e rilasciando le icone l'una sull'altra.

Una volta completata la personalizzazione, il file .bin corrispondente deve essere esportato dal profilo utente. Per individuare il file, navigare al seguente percorso:
%localappdata%\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState

Una volta esportato il file .bin sarà possibile distribuirlo su più computer e profili utente.
Start2.bin
FIG 2 - Start2.bin








lunedì 4 agosto 2025

Windows: Risoluzione dell'errore "Impossibile trovare l'assembly a cui fa riferimento" (0x80073701)

Durante l'aggiunta/rimozione di ruoli/funzionalità su Windows Server o sui client Windows 10/11 è possibile imbattersi in un errore specifico: 

La richiesta di aggiungere o rimuovere funzionalita' sul server specificato non e' riuscita. Impossibile installare uno o piu' ruoli, servizi ruolo o funzionalita'.
Impossibile trovare l'assembly a cui fa riferimento. Errore : 0x80073701

Questo messaggio indica che i file sorgente necessari per il componente richiesto sono mancanti o corrotti all'interno dell'immagine di Windows, rendendo impossibile l'operazione.


Controlli preliminari e riavvio del sistema

Prima di procedere con la risoluzione, è fondamentale verificare se ci siano aggiornamenti in attesa di riavvio. La mancata finalizzazione di un aggiornamento può bloccare altre operazioni di sistema.
Aprire un prompt dei comandi con privilegi elevati e digitare:
dism /online /get-packages /format:table | Select-String "Installazione in sospeso"
o nella versione inglese del sistema operativo
dism /online /get-packages /format:table | Select-String "Pending"
Installazione in sospeso
FIG 1 - Installazione in sospeso

Se vengono rilevati pacchetti con lo stato "Installazione in sospeso" (Pending Reboot), riavviare il computer. In alcuni rari casi, un pacchetto potrebbe rimanere in questo stato anche dopo diversi riavvii. In questa eventualità, provare a rinominare il file C:\Windows\Winsxs\Pending.xml in Pending.xml.old e riavviare nuovamente il sistema.
Pending.xml
FIG 2 - Pending.xml



Ripristino dell'integrità dell'immagine di sistema

Una volta verificato che non ci siano riavvii pendenti, il passo successivo è utilizzare lo strumento DISM (Deployment Imaging and Servicing Management) per verificare e riparare l'immagine di Windows.

Eseguire un controllo dell'integrità dell'immagine di sistema con il seguente comando:
DISM /Online /Cleanup-Image /CheckHealth
Se il comando restituisce il messaggio "The component store is repairable" (l'archivio dei componenti è riparabile), procedere con la riparazione.

Per riparare l'immagine, utilizzare il comando RestoreHealth. Questo comando scaricherà i file necessari da Windows Update per ripristinare i componenti danneggiati.
DISM /Online /Cleanup-Image /RestoreHealth

Dopo aver riparato l'archivio dei componenti, eseguire una scansione dei file di sistema per assicurarsi che non ci siano file danneggiati. Lo strumento SFC (System File Checker) utilizzerà l'archivio dei componenti appena riparato come fonte per i file originali.
sfc /scannow
sfc /scannnow
FIG 3 - sfc /scannnow



Analisi del log CBS e intervento manuale

Se le funzionalità di Windows continuano a non installarsi, è necessario esaminare il log di Servicing Stack per identificare la causa specifica dell'errore. Il file di log si trova in %windir%\Logs\CBS\CBS.log.
Cercare nel file di log un errore che indichi file di sistema mancanti relativi a un aggiornamento precedentemente installato. L'errore si presenterà in un formato simile a questo:

CBS Failed to pin deployment while resolving Update: Package_for_KB5012170~31bf3856ad364e35~amd64~~20348.880.1.1 from file: (null) [HRESULT = 0x80073701 – ERROR_SXS_ASSEMBLY_MISSING]

In questo esempio, l'errore è associato all'aggiornamento KB5012170.
Log CBS
FIG 4 - Log CBS



Download e installazione manuale dell'aggiornamento

Il modo più semplice per risolvere questo problema è scaricare manualmente l'aggiornamento specifico dal Catalogo di Microsoft Update e installarlo. Se l'installazione tramite il file .msu non dovesse funzionare, si può estrarre il pacchetto e aggiungerlo all'immagine di Windows:

Per estrarre il pacchetto MSU utilizzare il comando:
expand -f:* windows10.0-kb5012170-x64 c:\temp

Aggiungere  il pacchetto all'immagine di sistema di Windows in esecuzione :
DISM.exe /Online /Add-Package /PackagePath:c:\Temp\Windows10.0-KB5012170-x64.cab


Ignorare i pacchetti danneggiati (Procedura avanzata)

ATTENZIONE: Questo metodo non è supportato ufficialmente da Microsoft e può compromettere l'integrità del sistema. Eseguire un backup completo dell'immagine di Windows o creare un punto di ripristino prima di procedere.

Se l'aggiornamento non è disponibile per il download o non è applicabile, è possibile istruire Windows a ignorare il pacchetto danneggiato modificando il registro di sistema.

  • Aprire l'Editor del Registro di sistema (regedit).
  • Navigare alla chiave
    HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing
  • Impostare il proprio account come proprietario della chiave Component Based Servicing (l'owner predefinito è TrustedInstaller) e imopstare i permessi di controllo completo.
  • Individuare la sottochiave del pacchetto da ignorare (ad es. Package_for_KB5012170).
  • Modificare il valore del parametro CurrentState in 0 (Not present). Il valore precedente potrebbe essere 112 (Installed).
  • Ripristinare i permessi originali sulla chiave di registro, lasciando all'amministratore solo l'accesso in sola lettura.
  • Riavviare il computer e verificare se le funzionalità di Windows possono essere installate.

Per identificare tutti i pacchetti con l'errore ASSEMBLY_MISSING, puoi filtrare il log CBS con il seguente comando PowerShell:
Select-String -Path "c:\windows\logs\cbs\cbs.log" -Pattern "Failed to pin"


Aggiornamento in-place (ultima risorsa)

Se tutte le soluzioni precedenti non hanno successo, l'opzione finale è un aggiornamento in-place del sistema operativo. Questo processo reinstallerà Windows mantenendo i file personali, le impostazioni e le applicazioni.
Scaricare l'immagine ISO più recente della propria versione di Windows.
Montare il file ISO e avviare il programma setup.exe.
Selezionare l'opzione "Mantieni file personali e app" quando richiesto per l'aggiornamento.
Questo metodo può risolvere problemi di integrità complessi che non possono essere corretti con i normali strumenti di riparazione, offrendo una soluzione completa.