Entra

View Full Version : Come si automatizza l'installazione di molti hotfix?


hexaae
28-01-2009, 06:03
Con più di 60 hotfix collezionati mi trovo costretto ad automatizzare l'operazione di installazione, evitando ovviamente reboot multipli.
Qualcuno mi sa spiegare come si fa su Vista ad automatizzare questa procedura con 1 unico reboot avendo a disposizione i singoli file .msu degli hotfix?

PS
Niente VLite grazie...

hexaae
28-01-2009, 07:54
Ok, pare che si usi la sintassi da shell amministratore:
wusa <hotfix.msu> /quiet /norestart

Ora devo trovare il modo per automatizzare la creazione di un batch con più righe di comando "wusa ..." partendo da una dir con tutti i file degli hotfix .msu...

Dalla shell di AmigaOS era una cazzata: list LFORMAT="wusa %n /quiet /norestart" >auto.bat
Da MSDOS è un impresa visti i limiti penosi dei comandi e l'impossibiltà di cambiare l'output di un comando... :rolleyes:
Dir /B al massimo fa una lista con solo i nomi dei file, peccato che non si possa alterare l'output per inserire direttamente "wusa " davanti a ogni riga...

FulValBot
28-01-2009, 08:54
mmm a proposito: ci sono delle volte in cui di hot-fix ne metto parecchi alla volta, e poi alla fine riavvio solo dopo averli messi tutti insieme, ovviamente intendo il normale riavvio.

non è che per caso in quel modo stia sbagliando qualcosa?

WarDuck
28-01-2009, 10:59
[...]
Da MSDOS è un impresa visti i limiti penosi dei comandi e l'impossibiltà di cambiare l'output di un comando... :rolleyes:

Falso:

C:\Users\Giulio>help for
Runs a specified command for each file in a set of files.

FOR %variable IN (set) DO command [command-parameters]

%variable Specifies a single letter replaceable parameter.
(set) Specifies a set of one or more files. Wildcards may be used.
command Specifies the command to carry out for each file.
command-parameters
Specifies parameters or switches for the specified command.

To use the FOR command in a batch program, specify %%variable instead
of %variable. Variable names are case sensitive, so %i is different
from %I.

If Command Extensions are enabled, the following additional
forms of the FOR command are supported:

FOR /D %variable IN (set) DO command [command-parameters]

If set contains wildcards, then specifies to match against directory
names instead of file names.

FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]

Walks the directory tree rooted at [drive:]path, executing the FOR
statement in each directory of the tree. If no directory
specification is specified after /R then the current directory is
assumed. If set is just a single period (.) character then it
will just enumerate the directory tree.

FOR /L %variable IN (start,step,end) DO command [command-parameters]

The set is a sequence of numbers from start to end, by step amount.
So (1,1,5) would generate the sequence 1 2 3 4 5 and (5,-1,1) would
generate the sequence (5 4 3 2 1)

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
Press any key to continue . . .


Dir /B al massimo fa una lista con solo i nomi dei file, peccato che non si possa alterare l'output per inserire direttamente "wusa " davanti a ogni riga...

Esiste il redirect dell'output tramite > e puoi mettere in cascata i comandi con |.

;), volendo c'è anche PowerShell che è una shell ad oggetti, però oltre ad essere molto potente mi sembra anche abbastanza complicata.

Edit: aggiungo che per fare una cosa realmente forte si potrebbe usare NSIS... :D, il fatto è che ti serve anche sapere l'ordine con cui processare gli update :(.

hexaae
28-01-2009, 11:38
Falso:
E no, è vero purtroppo... non esiste un equivalente dell'opzione LFORMAT per cambiare l'output (=non parlo di redirezione!) di un comando come un list. È terribilmente limitato DIR nell'output format.
Con un solo comando come ho specificato nell'esempio prima su AmigaOS puoi creare un file batch contenente:
wusa <nomefile1.msu> /quiet /norestart
wusa <nomefile2.msu> /quiet /norestart
wusa <nomefile3.msu> /quiet /norestart
...
il comando List (analogo con molte più funzionalità di DIR, 'Ls' per intenderci sugli altri sistemi Unix-like...).
Vuoi mettere la potenza senza dover usare un giro di FOR e crearsi un batchfile?

Esiste il redirect dell'output tramite > e puoi mettere in cascata i comandi con |.
Certo, lo so... Ti sei confuso: ho parlato di output format non di redirezione o pipe io...

;), volendo c'è anche PowerShell che è una shell ad oggetti, però oltre ad essere molto potente mi sembra anche abbastanza complicata.
Io non vedo l'ora che in Win7 inglobino per bene la PowerShell come promesso abbandonando i limiti del vetusto MSDOS command.com.
PowerShell dovrebbe essere forse anche più potente delle shell dei sistemi Unix-like...

Edit: aggiungo che per fare una cosa realmente forte si potrebbe usare NSIS... :D, il fatto è che ti serve anche sapere l'ordine con cui processare gli update (.

Dopo ci penso ed elaboro un semplice script usando un loop di FOR come mi hai suggerito...
Nel frattempo cmq avevo già risolto editando poi a mano il risultato della redirezione di un DIR /B >auto.bat con notepad e sostituendo l'inizio di ogni riga ("Wind") con "wusa Wind", e la fine ".msu" con ".msu /quiet /norestart" ;)

WarDuck
28-01-2009, 13:51
Ah scusami non avevo capito bene cosa intendevi con LFORMAT...

Praticamente vorresti mettere davanti ad ogni file il comando wsus giusto?

Prova così:


@echo off
FOR %%v IN (*) DO echo FILE: %%v

Questo batch lista i file nella directory corrente mettendoci davanti "FILE:".
ECHO stampa a video.

Questa sintassi è valida per fare un file batch con estensione .cmd, questo è un esempio di output:

C:\Users\Giulio\Desktop>test
FILE: chkdsk.log
FILE: esami.xps
FILE: ESET OnlineScanner.lnk
FILE: STALKER.lnk
FILE: test.cmd

C:\Users\Giulio\Desktop>

In sostanza puoi arrivare ad ottenere questo:

C:\Users\Giulio\Desktop>test
wsus "chkdsk.log" /quiet /norestart
wsus "esami.xps" /quiet /norestart
wsus "ESET OnlineScanner.lnk" /quiet /norestart
wsus "STALKER.lnk" /quiet /norestart
wsus "test.cmd" /quiet /norestart
wsus "test.log" /quiet /norestart

C:\Users\Giulio\Desktop>

Con questo codice:

@echo off
FOR %%v IN (*) DO echo wsus "%%v" /quiet /norestart

Per renderlo effettivo basta che cambi il filtro dentro le parentesi dell'IN (al posto di * usare *.msu) e togliere l'echo davanti il DO.

hexaae
28-01-2009, 15:57
Ah scusami non avevo capito bene cosa intendevi con LFORMAT...

Praticamente vorresti mettere davanti ad ogni file il comando wsus giusto?

Prova così:

@echo off
FOR %%v IN (*) DO echo wsus "%%v" /quiet /norestart

Esatto! Sfruttando echo come volevo fare dovrebbe andare.... e infatti funziona :)
Allora il bat completo può essere così:


@echo off
FOR %%v IN (*.msu) DO echo wusa "%%v" /quiet /norestart >>auto_hotfix.bat
call auto_hotfix.bat
echo finito.
del /P auto_hotfix.bat


Così crea auto_hotfix.bat con tutta la lista dei vari:
wusa "Windows....hotfix...nnnn 1.msu" /quiet /norestart
wusa "Windows....hotfix...nnnn 2.msu" /quiet /norestart
...
Esegue questo auto_hotfix.bat automaticamente e alla fine scrive "finito." e chiede all'utente di cancellare il file temporaneo usato auto_hotfix.bat.

In questo modo basta collezionare tutti gli hotfix in una dir e poi basterà lanciare quel bat per applicarli tutti in successione senza reboot (se non alla fine da parte dell'utente), anche se ne vengono aggiunti mano a mano alla directory col tempo. :yeah:

PS
@WarDuck
Il comando giusto è "wusa"...

WarDuck
28-01-2009, 19:16
Eheh vedi che funziona? ;)

Cmq puoi pure farglielo eseguire direttamente (togliendo echo), senza far creare il file bat :D ...

Oppure puoi lascialo così e introdurre un comando Pause prima della call (in modo da confermare l'esecuzione).

Piuttosto hai capito se bisogna seguire un ordine particolare per le KB?

Ghost Of Christmas Past
28-01-2009, 21:16
se avete problemi col cmd.exe potete sempre usare la powershell.. la 1.0 o la 2.0 CTP3, sempre meglio che "quellamerda" di cmd.exe

hexaae
29-01-2009, 08:30
Piuttosto hai capito se bisogna seguire un ordine particolare per le KB?

Che io sappia no... li ho sempre applicati a casaccio e mai un problema ;)
Credo che anche senza reboot tra l'uno e l'altro tenga traccia degli update "virtuali" precedenti per cui non corre mai il rischio di sovrascrivere un file vecchio a uno nuovo... e/o ipotizzo che in fase di reboot faccia questi check (presente quando scrive fase 3/3 o 2/2?)....
Infine confermo che dopo l'applicazione a casaccio ho sempre trovato installato le ultime versioni dei file come mi aspettavo quindi funziona...
Ho letto in qualche forum invece che ai tempi di XP bisognava stare attenti all'ordine, ma anche lì nessuno ha mai confermato.

hexaae
29-01-2009, 08:32
se avete problemi col cmd.exe potete sempre usare la powershell.. la 1.0 o la 2.0 CTP3, sempre meglio che "quellamerda" di cmd.exe

Amen. ;)

WarDuck
29-01-2009, 14:19
Che io sappia no... li ho sempre applicati a casaccio e mai un problema ;)
Credo che anche senza reboot tra l'uno e l'altro tenga traccia degli update "virtuali" precedenti per cui non corre mai il rischio di sovrascrivere un file vecchio a uno nuovo... e/o ipotizzo che in fase di reboot faccia questi check (presente quando scrive fase 3/3 o 2/2?)....
Infine confermo che dopo l'applicazione a casaccio ho sempre trovato installato le ultime versioni dei file come mi aspettavo quindi funziona...
Ho letto in qualche forum invece che ai tempi di XP bisognava stare attenti all'ordine, ma anche lì nessuno ha mai confermato.

Hai ragione in effetti vengono applicati quando si termina la sessione quindi potrebbe essere come dici ;).

Beh meglio così, evidenzia ancora una volta le migliorie rispetto a XP.

FulValBot
29-01-2009, 17:33
mmm a proposito: ci sono delle volte in cui di hot-fix ne metto parecchi alla volta, e poi alla fine riavvio solo dopo averli messi tutti insieme, ovviamente intendo il normale riavvio.

non è che per caso in quel modo stia sbagliando qualcosa?

up

mirrorx
11-06-2010, 10:39
Funziona anche con i WindowsXP-KBxxxxxxx-x86-ITA.exe ?

mirrorx
14-07-2010, 11:12
Funziona anche con i WindowsXP-KBxxxxxxx-x86-ITA.exe ?

Nessuno?:(