Hotfix Installazione LDR

Se vi capita di aprire una chiamata al Supporto Tecnico è possibile che vi venga richiesto di installare un un aggiornamento che non è ancora stato rilasciato al pubblico.

Queste hotfix private vengono anche chiamate LDR che significa “Limited Distribution Release”
Le hotfix pubbliche invece fanno parte della serie GDR che sta per “General Distribution Release”

Trovate maggiori informazioni in questo articolo:

http://blogs.technet.com/b/itasupport/archive/2009/09/14/windows-update-tipologie-di-aggiornamenti-qfe-ldr-e-gdr.aspx

Una hotfix GDR o LDR consiste in un file chiamato “installer”, con estensione .msu, che contiene tutti i files di sistema che vengono aggiornati ed i comandi per installare questi files.

Ci sono diversi tipi di installer, a seconda del contenuto:

1- GDR

2- LDR

3- GDR + LDR

Per quanto riguarda il primo ed il secondo tipo potete eseguire direttamente l’installer e la corrispondente hotfix verrà installata.

Per quanto riguarda il terzo tipo l’azione da eseguire dipende dal risultato che volete ottenere.
La versione GDR di una hotfix può essere installata eseguendo direttamente l’installer.
Se invece volete installare la versione LDR la procedura è un po’ più complicata ed è spiegata nel dettaglio sempre nell’articolo linkato più sopra.

Se dovete installare diverse hotfix LDR su parecchi server l’operazione può richiedere parecchio tempo quindi abbiamo pensato di preparare uno script per semplificare l’operazione.
Questo script è pensato per sistemi operativi Windows 7 e successivi.

Option Explicit
Dim oFso, oShell, oExec, oDir, oFile
Dim cTempDir, cCmd, cSource, nRet, cHFDir, cCab, cFile
if wscript.arguments.count = 0 then
wscript.echo "Please speficy a file name"
wscript.quit
end if

Set oFso = CreateObject("Scripting.FileSystemObject")
Set oShell = CreateObject("WScript.Shell")
cSource = wscript.arguments(0)
if not oFso.FileExists(cSource) then
wscript.echo "The file " + cSource + " does not exists"
wscript.quit
end if

cTempDir = oShell.ExpandEnvironmentStrings("%Temp%") + "\LDRInstaller-" + oFso.GetTempName
oFso.CreateFolder cTempDir
cCmd = "expand -f:* " + cSource + " " + cTempDir
wscript.echo cCmd
Set oExec = oShell.Exec(cCmd)
do while oExec.status = 0
wscript.sleep 100
loop

wscript.echo oExec.stdout.ReadAll()
wscript.echo oExec.stderr.ReadAll()
cCab = ""
Set oDir = oFso.GetFolder(cTempDir)

for each oFile in oDir.Files
cFile = LCase(oFile.name)
if instr(cFile, "kb") > 0 and right(cFile,3) = "cab" then
cCab = oFile.name
end if

next
if cCab = "" then
wscript.echo "No cab file found inside the hotfix installer"
CleanUp
end if

cHFDir = cTempDir + "\hotfix"
oFso.CreateFolder cHFDir
cCmd = "expand -f:* " + cTempDir + "\" + cCab + " " + cHFDir
wscript.echo cCmd
Set oExec = oShell.Exec(cCmd)
do while oExec.status <> 0
wscript.sleep 100
loop

wscript.echo oExec.stdout.ReadAll()
wscript.echo oExec.stderr.ReadAll()
if not oFso.FileExists(cHFDir + "\update-bf.mum") then
wscript.echo "This update does not contain the installer for the LDR branch"
CleanUp
end if

cCmd = "pkgmgr /ip /m:" + cHFDir + "\update-bf.mum" + " /norestart"
wscript.echo cCmd
Set oExec = oShell.Exec(cCmd)
do while oExec.status <> 0
wscript.sleep 100
loop
wscript.echo oExec.stdout.ReadAll()
wscript.echo oExec.stderr.ReadAll()
CleanUp
Sub CleanUp
oShell.run "cmd.exe /c rd " + cTempDir + " /S /Q"
wscript.quit
End Sub

Per utilizzare lo script:

- Copiate lo script in una cartella (per esempio C:\LDRInstaller) e chiamatelo LDRInstaller.vbs

- Aprite un prompt dei comandi come amministratore e andate nella cartella C:\LDRInstaller

- Copiate nella stessa cartella l’installer per il quale volete installare la versione LDR

- Eseguite il comando cscript LDRInstaller.vbs <nome dell’installer>
Per esempio cscript LDRInstaller.vbs Windows6.1-KB12345678-x64.msu

Buona giornata e al prossimo articolo  :-)

Gianni Bragante
Senior Support Engineer