Internet Explorer 8 Remote installieren

Viele Administratoren werden sicherlich schon einmal vor der Problem gestanden haben, ein Programm auf mehreren Rechnern (nach-)installieren zu müssen, ohne dafür auf eine richtige Softwareverteilung zurückgreifen zu können. In so einem Falle hat man mehrere Möglichkeiten: Entweder man nimmt sich jeden Rechner einzeln vor, oder man baut sich seine eigene “Softwareverteilung”. Ersteres dürfte wohl nur in relativ kleinen Netzwerken eine ernsthaft zu erwägende Option sein, da der Zeitaufwand spätestens ab zehn Rechnern in unverhältnismäßige Dimensionen steigt. Bleibt also nur der zweite Weg – und die Frage nach dem “Wie?”…

… Welche sich denn auch recht schnell und einfach beantworten lässt: mit knapp 60 Zeilen Skriptcode, ein wenig Basiswissen im Umgang mit VBScript und WMI, sowie einer passenden Installationsdatei. Im Falle des Internet Explorer 8 empfiehlt es sich, ein MSI-Paket zu verwenden, welches man sich aber leider erst selbst mit dem Internet Explorer Administration Kit (IEAK) 8 erstellen muss. Ist dies soweit gelungen, kann man sich an das Installationsskript machen. Ziel ist es, dass das Skript zentral ausgeführt wird und dann automatisch die Installation auf allen angegebenen Rechnern vornimmt. Und das Ergebnis sieht wie folgt aus:

'## Remote-Installationsskript v1.5 ##

Program = "Internet Explorer 8"
SrcPath = "P:\Browser\Internet_Explorer_8\"
SetupFile = "IE8-Setup-Full.msi"
InstOptions = " /quiet /qn /norestart"
ComputerListe = "ComputerListe.txt"
LogFile = ScrPath & Program & " Installation.log"

Set fso = createobject("scripting.filesystemobject")
Set oLogging = fso.OpenTextFile(LogFile, 8, true)
Set oComputerListe = fso.opentextfile(ComputerListe, 1, false)
if (Err.Number <> 0) then
WScript.echo "Cannot open " & ComputerListe
WScript.quit
end if

WScript.Echo "Beginning Remote Installation."

on error resume next

while not oComputerListe.atEndOfStream
Computer = oComputerListe.ReadLine()

'WScript.echo "Copying files to " & Computer & " ..."

fso.CopyFile SrcPath & SetupFile, "\\" & Computer & "\C$\Temp\", true
if (Err.Number <> 0) then
WScript.echo "Failed to copy File(s) on " & Computer & " with " & Err.Number
end if

Err.Clear

'WScript.echo "Connecting to " & Computer & "..."

if (Err.Number <> 0) then
WScript.echo "Failed to connect to " & Computer & "."
else

'WScript.echo "Installing " & Program

Set oWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & Computer & "\root\cimv2")
Set oProcess = oWMI.Get("win32_process")
oProcess.create "C:\Windows\System32\msiexec.exe /i C:\Temp\" & SetupFile & InstOptions
if (Err.Number <> 0) then
WScript.echo "Failed to start process on " & Computer & ": " & Err.Number
else
oLogging.WriteLine(Computer & ": " & Date)
end if
end if

Err.Clear

wend

oComputerListe.close()
oLogging.close()

WScript.echo "Exiting."

Das Skript greift auf die Datei “ComputerListe.txt” zu, in der die Zielhosts mit Name oder IP-Adresse definiert sind. Auf jeden Host wird das MSI-Paket nach C:\Temp kopiert. Ist der Kopiervorgang erfolgreich abgeschlossen, stellt das Skript eine WMI-Verbindung mit dem Zielhost her und startet auf diesem den Setupprozess. Ein fehlerfreier Start wird in einer Logdatei mit Datum protokolliert, eventuelle Fehlermeldung werden auf den Bildschirm ausgegeben. WICHTIG: Der Account, unter dem das Skript ausgeführt wird, benötigt auf den Ziel PCs die notwendigen Rechte, um auf WMI zugreifen und Programme installieren zu können. Im günstigsten Falle startet man das Skript also unter einem Domänenadmin-Account.

Natürlich ist dies bei weitem nicht mit einer wirklichen Softwareverteilung zu vergleichen, aber mit ein Bisschen Fleißarbeit kann man das Skript noch etwas aufbohren. So können z.B. Hosts aus einem Active Directory ausgelesen werden, anstelle aus der Textdatei. Ebenso kann man auch durch Überprüfung der Installationslogs auf den Rechnern das Ergebnis der Installation abprüfen und dieses z.B. in eine Datenbank schreiben – VBScript bietet hier viele Möglichkeiten, die man sich mit ein wenig Zeit und Lust zu nutze machen kann. Viel Spaß beim Skripten!