Script di azione personalizzati

<img style="”float:" right;” src="”https://www.recastsoftware.com/wp-content/uploads/2021/10/Recast-Logo-Dark_Horizontal.svg”" alt="&quot;Immagine&quot;" height="”43″" width="”150″">

Script di azione personalizzati per l'aggiornamento di Windows

Gli script di azione personalizzati consentono di eseguire comandi aggiuntivi durante il processo di installazione di Windows. Microsoft essenzialmente ti ha dato la possibilità di inserire i tuoi comandi nel processo di installazione. Il motore di installazione Windows 10 ha diversi hook in punti diversi che raggiungono, controllano posizioni specifiche e chiamano script se esistono. Microsoft li ha documentati abbastanza bene di seguito, ma l'intento di questo post sarà di andare un po' più in profondità, mostrandoli in azione, mostrando come è possibile crearli e quindi mostrando i registri di quando vengono chiamati.

MS Docs

https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-setup-enable-custom-actions

Se usi le funzionalità di aggiornamento di Windows native, "Aggiornamenti delle funzionalità" e non utilizzi una sequenza di attività per eseguire le personalizzazioni, avrai bisogno di altri metodi per attivare azioni, come disabilitare servizi o prodotti di sicurezza durante gli aggiornamenti. Ciò significa che dovrai predisporre i file in anticipo, sfruttando una sequenza di attività o un pacchetto, in modo che quando l'aggiornamento verrà eseguito, quei file saranno lì per il motore di installazione da sfruttare.

Motivi tipici per l'utilizzo di script di azione personalizzati

  • Disabilitazione di servizi o AV prima di avviare la fase di livello inferiore
  • Attivazione di un bypass pre-avvio di crittografia di terze parti
  • Correggi alcune applicazioni dopo l'aggiornamento
    • Per noi, avevamo diverse app che richiedevano la nuova registrazione dei file o l'esecuzione del metodo di riparazione sul programma di installazione MSI.
    • Quando ciò accade, suggerisco anche di lavorare con quei fornitori per convincerli ad aggiornare le loro app per sopravvivere a un aggiornamento o cercare un software diverso.
  • Applica alcune personalizzazioni
    • Schermata di blocco, sfondi, immagini del profilo utente, ecc
  • Esegui configurazione diag
  • Copia log
  • Ripristinare il client CM dopo un rollback o OSUninstall (quando si utilizza una sequenza di attività per l'aggiornamento)

A questo punto, presumo che tu legga i documenti MS e conosca le basi:

  • nomi dei File Script (e relativi codici di errore sugli errori)

    • preinstall.cmd | 0XC19001e2
    • precommit.cmd | 0XC19001e3
    • postuninstall.cmd |
    • fallimento.cmd | 0XC19001e4
    • success.cmd |
  • Sedi di dove mettere i file

    • %windir%System32updaterun
      • Questi script rimarranno da un aggiornamento all'altro (permanente)
    • %windir%System32updaterunonce
      • Questi script verranno rimossi dopo l'aggiornamento (temporaneo)

In questo post, creeremo ciascuno di questi file e esamineremo l'installazione di Windows sfruttandoli.

<div class="”TIP" alert alert-tip”><h5>CONSIGLIO</h5><p><p>Sebbene le chiamate agli script di installazione di Windows siano semplici file batch, è possibile utilizzare tali file batch per chiamare script PowerShell più complessi</p>
</p></div>

Esempi

In questo esempio, ho un'"Applicazione" in CM che esegue uno script PowerShell che crea gli script di azione personalizzati o copia gli script pre-creati in posizione da utilizzare nel processo di aggiornamento delle funzionalità.

Lo script di primo livello si chiama: "CreateCustomActionScripts.ps1", genererà uno di ciascuno degli script sia in una cartella run che runonce, che contrassegna il registro con un timestamp di quando lo script viene eseguito. Questo aiuterà a capire quando gli script vengono eseguiti. Lo script controllerà anche il contenuto della cartella in cui si trova e, se trova uno script, lo copierà nella posizione corretta.

Contenuti dell'applicazione

CustomActionScripts 02

Risultati dell'installazione degli script di azione personalizzati

L'applicazione contrassegna il registro con una versione dello script, crea gli script di azioni personalizzate, crea i file di personalizzazione in ProgramDataWaaS e registra tutto
CustomActionScripts 03
CustomActionScripts 03a

Gli script per il contenuto dell'applicazione sono ospitati su GitHub

Dimostrazione

Demo di base che mostra i log

SetupAct.log = C:windowsPanthersetupact.log (posizione post aggiornamento)
Lo script di preinstallazione è stato eseguito all'inizio del processo, prima che il motore di installazione facesse molto.
CustomActionScripts 04
La macchina finisce di funzionare nella fase di downlevel, ha impiegato circa 20 minuti sulla mia VM, quindi si ferma e attende che l'utente finale approvi il riavvio.
CustomActionScripts 07
CustomActionScripts 01
Una volta approvato il riavvio, lo script di precommit verrà eseguito prima che la macchina si riavvii effettivamente. Da questi registri puoi vedere che dal momento in cui ho fatto clic su Riavvia, ci sono stati 39 secondi, in cui c'è molto registro.
CustomActionScripts 05
CustomActionScripts 06

A questo punto, non vediamo molto per gli script di azioni personalizzate fino alla fine, sia successo che fallimento.

CustomActionScripts 08

Quindi questo è un semplice esempio che mostra quando vengono eseguiti e come vengono visualizzati in setupact.log

Per la prossima demo, diamo un avviso e facciamo in modo che gli script facciano qualcosa di più che scrivere nel registro.

Controlli precommit – Crea un errore

In questa demo, creerò un controllo dello stile pre-flight che eliminerà l'aggiornamento se corrisponde a una regola che creiamo nello script di preinstallazione.
Qui è mostrato Software Center che mostra i risultati dell'aggiornamento delle funzionalità e il codice di errore. 0xC19001E2 si riferisce a un problema con preinstall.cmd

CustomActionScripts 09

Il registro mostra che ha eseguito lo script di preinstallazione e gli è stato assegnato un codice di uscita di 253, che è il codice di uscita che il mio script personalizzato crea quando rileva un'applicazione che non soddisfa i requisiti che ho impostato. Poiché lo script di preinstallazione restituisce un codice diverso da zero, indica al motore di installazione che si è verificato un problema e il motore di installazione inizia a non eseguire l'aggiornamento prima ancora che venga avviato.
CustomActionScripts 10
Poiché l'aggiornamento fallisce, chiama il mio script failure.cmd personalizzato, che al momento non devo fare altro che scrivere una voce di registro per confermare che è stato eseguito quando ha detto che lo ha fatto, che corrisponde perfettamente a setupact.log .
CustomActionScripts 11
CustomActionScripts 13
Inoltre, un'altra grande caratteristica di Windows 10 20H2, attiva automaticamente SetupDiag quando si verifica un errore. Cattura in XML e nel registro. Ecco una cattura del registro.
CustomActionScripts 12
Per ulteriori dettagli su SetupDiag e su come funziona e cosa cattura, dai un'occhiata al Documenti

Informazioni sullo script di successo e utilizzo per le personalizzazioni

Questa demo sfrutterà il file success.cmd, niente di eccezionale, ma un buon esempio di cosa si può fare.
Come con gli altri script di azioni personalizzate, avrò success.cmd attivare uno script PowerShell che farà il lavoro pesante. Ce l'ho anche a fare un paio di altre cose.

<div class="”NOTE" alert alert-note”><h5>NOTA</h5><p><p>Il file Success.cmd non viene eseguito dal punto in cui lo hai inserito (C:WindowsSystem32Update), il motore di installazione ne esegue una copia in C:WindowsSetupScriptsupdate, motivo per cui lo vedrai in esecuzione lì.</p>
</p></div>

CustomActionScripts 18
CustomActionScripts 17

Ecco gli script delle azioni personalizzate e il contenuto del file success.cmd. Sto usando una "Applicazione" per attivare uno script per aggiungere i file nelle posizioni corrette.
CustomActionScripts 14

Success.cmd imposta alcune autorizzazioni per configurare la sostituzione delle immagini della schermata di blocco e dello sfondo, quindi chiama due diversi script di PowerShell.

Negli script stiamo impostando alcuni valori di registro, sostituendo l'immagine della schermata di blocco e le immagini di sfondo ed eseguendo setupdiag.exe per divertimento per ottenere alcune metriche.

I miei script scrivono in un registro personalizzato (c:ProgramDataWaaSCustomActions.log) in modo da sapere esattamente quando sono stati eseguiti i miei script e cosa hanno fatto. Ogni script utilizza un nome "Componente" diverso, per poter tenere traccia di quale script sta scrivendo nel file di registro.
CustomActionScripts 15

Il file Success.cmd che ho, attiva due diversi file PowerShell, Success.ps1 e SuccessSetupDiag.ps1, che scrivono entrambi su quel registro con nomi di "Componenti" diversi.

  • SuccessSetupDiag.ps1 (attivato da Success.cmd, ma non monitorato, Success.cmd continua)

    • Monitora la creazione di windows.old, una volta creato, attiva SetupDiag.exe per raccogliere i risultati e li aggiunge al registro: HKLMSOFTWAREWAAS%BUILDNUMBER%
  • Successo.ps1 (Innescato da Success.cmd e Success.cmd attende il codice di ritorno)

    • Modifica i valori del Registro di sistema per personalizzare l'esperienza utente
    • Copia l'immagine della schermata di blocco dall'area organizzata (ProgramDataWaaS) alla posizione di Windows
    • Copia l'immagine di sfondo dall'area dello stage alla posizione di Windows
    • Copia le immagini del profilo utente (logo aziendale predefinito) dall'area gestita alla posizione di Windows
    • Eventuali personalizzazioni aggiuntive che vorrei fare, le aggiungerei qui

Il registro sopra mostra l'output di questi due script in esecuzione.
I risultati nel Registro di sistema dopo un aggiornamento riuscito. Ogni script che è stato eseguito ho contrassegnato il registro per assicurarmi che funzionasse e al momento dell'esecuzione.
CustomActionScripts 19
I risultati di SetupDiag:
CustomActionScripts 20

Dopo l'aggiornamento, come previsto, la cartella "Run" è stata migrata al nuovo sistema operativo, per essere utilizzata per il prossimo aggiornamento delle funzionalità, e la cartella "RunOnce" è scomparsa
CustomActionScripts 16

Diagramma

CustomActionScripts 21

  • Preinstallazione eseguito dopo aver scaricato le DU, che ha richiesto dai 10 ai 15 minuti sulle mie VM, se si disabilitano gli aggiornamenti dinamici, PreInstall verrà eseguito molto rapidamente dopo l'avvio dell'aggiornamento.
  • Precommit eseguito poco dopo aver fatto clic su "Riavvia". Fondamentalmente il Feature Upgrade ha attraversato la fase di downlevel iniziale, è arrivato a un punto in cui notifica (o richiede) all'utente un riavvio, quindi una volta approvato o continua automaticamente, vengono eseguiti i processi della fase di downlevel finale, incluso il PreCommit.
  • Successo eseguito quasi alla fine dell'intero processo. Sono trascorsi solo un paio di minuti tra il momento in cui è stato eseguito e il momento in cui mi è stata presentata la schermata di accesso al desktop.

PostUninstall.cmd

Viene eseguito quando un utente sfrutta il "torna indietro". Ci saranno diversi elementi sovrapposti tra un "Disinstalla" e un "rollback", i registri saranno nella stessa posizione, ed è in realtà lo stesso file di registro per entrambi. Ma il sistema è abbastanza intelligente da conoscere la differenza ed eseguire failure.cmd o PostUninstall.cmd

I log si trovano qui: $WINDOWS.~BTSourcesRollback

All'inizio del registro, viene visualizzato Initiating rollback/uninstall, per confermare che sei nel posto giusto.
CustomActionScripts 22

Verso la fine, mostra che ha eseguito il file PostUninstall.cmd.
CustomActionScripts 23

Rimani sintonizzato

  • Questo post non è ancora completo, ho ancora intenzione di aggiungere informazioni su failure.cmd e postuninstall.cmd con demo.

Riferimenti

Link al blog della comunità

Scopri come Right Click Tools sta cambiando il modo in cui vengono gestiti i sistemi.

Aumenta immediatamente la produttività con la nostra Community Edition limitata e gratuita.

Inizia oggi con Right Click Tools:

Condividi questo:

Supporto

  • Questo campo serve per la convalida e dovrebbe essere lasciato inalterato.

Contatti

  • Questo campo serve per la convalida e dovrebbe essere lasciato inalterato.
it_ITItalian