Ein kleines Skript zur Softwareverteilung

Das hier zum Download angebotene kleine VB-Skript dient sozusagen als ‚Rahmen‘ zur bedingten Verteilung beliebiger Programme. Die Deinstallation und Installation von Software erfolgt über in einer INI-Datei hinterlegte Kommandozeilenbefehle, die abhängig von dem jeweiligen Installations-/Deinstallations-Flag (Datei/Registry-Key) ausgeführt werden. Da es alle benötigten Parameter aus der INI-Datei bezieht sind Anpassungen des Skripts selbst i.d.R. nicht notwendig.

Der allgemeine Ablauf der Skripts sieht wie folgt aus:

  • Überprüfung: Deinstallations-Flag vorhanden?
  • Ja -> Ausführung Deinstallations-Befehle
  • Überprüfung: Deinstallations-Flag vorhanden (Deinstallation erfolgreich)?
  • Überprüfung: Installations-Flag vorhanden?
  • Nein -> Ausführung Installations-Befehle
  • Überprüfung: Installations-Flag vorhanden (Installation erfolgreich)?

INI-Datei

In der INI-Datei können zur Steuerung des Installationsablaufs folgende Parameter, unterteilt in drei Sektionen, genutzt werden:

[Product]
Name
LogFile
Output
CreateFlag
WOW64
Include
Exclude
[Install]
Flag
FlagParam
IsUpdate
Command
Description
[Uninstall]
Flag
FlagParam
Command
Description

[Product]


Name

Bezeichnung der verteilten Software. Wird genutzt für Bildschirm- und Log-Ausgabe.

Angabe: Optional
Default: <leer>


LogFile

Pfad und Dateiname der Logdatei. Darin werden die Flag-Überprüfungen und ausgeführten Befehle protokolliert.

Z.B. \\bistron.eu\DFS\Logs\InstallScript\%COMPUTERNAME%.log

Angabe: Optional
Default: <leer> (kein Log)


Output

Bildschirmausgabe des Installationsstatus.

0 – aus
1 – an

Angabe: Optional
Default: 0

Ist in der INI-Datei die Bildschirmausgabe aktiv (Output=1) bitte unbedingt über cscript.exe (NICHT wscript.exe) ausführen!

Bei Ausführung des Skripts als Computerstartskript via Gruppenrichtlinie wird die Bildschirmausgabe nur sichtbar sein, wenn die sichtbare Ausführung von Startskripten auch aktiviert ist. (GPO: Computerverwaltung – Administrative Vorlagen – System – Skripts – Startskripts sichtbar ausführen). Unter Windows Vista/7 muss zusätzlich die asynchrone Skriptverarbeitung deaktiviert werden.


CreateFlag

Das Skript kann das Install-Flag (Reg-Key/Datei) nach Ausführung der Installations-Befehle selbst anlegen (sofern die Installation kein geeignetes liefert).

0 – aus
1 – an

Angabe: Optional
Default: 0


WOW64

Dieser Parameter beeinflusst unter 64-Bit Betriebssystemen sowohl die Prüfung der Install- und Uninstall-Flags, als auch die ausgeführten Befehle.

Bei paralleler Verteilung einer 32-Bit-Anwendung auf 32-Bit- und 64-Bit-Systeme wird somit eine (wegen unterschiedlicher Datei-/Registrierungs-Pfade) sonst notwendige zweite INI-Datei überflüssig.

Bei Prüfung des Dateiflags und in den angegebenen Befehlen wird die Umgebungsvariable %programfiles% automatisch umgewandelt zu %programfiles(x86)%. Andere Umgebungsvariablen werden (noch) nicht übersetzt.

Bei Prüfung eines Registrierungs-Schlüssels wird auf die „32-Bit Sicht“ geschaltet – d. h. es sind nur die Inhalte der Wow6432Node-Keys zu „sehen“. Weitere Details…

0 – aus
1 – an

Angabe: Optional
Default: 0


Include

Es kann eine kommagetrennte Liste von Maschinennamen angelegt werden, auf denen die Installation bei Skriptausführung durchgeführt wird; auf allen nicht in der Liste genannten Maschinen, wird bei Ausführung des Skripts die Installation nicht durchgeführt. Haben alle Maschinennamen, auf denen die Installation durchgeführt werden soll, einen gleichlautenden Anfang, so ist es ausreichend nur den gemeinsamen Teil des Namens anzugeben.

Soll beispielsweise die Installation bei Skriptausführung auf den Maschinen Client001 bis Client009 durchgeführt werden:

Include = Client001,Client002,Client003,Client004,Client05,Client006,Client007,Client008,Client009

oder kürzer:

Include = Client00

Angabe: Optional


Exclude

Wie bei Include kann eine kommagetrennte Liste von Maschinennamen, oder deren gemeinsamer linker Teil angegeben werden. Exclude schließt auch unter Include angegebene Maschinen von der Installation aus.

Sollen die Installationsbefehle z.B. bei Verwendung von Include = Client0 auf den Clients 001-019 nicht durchgeführt werden:

Exclude = Client00,Client01

Angabe: Optional


[Install]


Flag

Datei/Reg-Key/-ValueName an dem erkannt wird, dass die Software bereits installiert ist (ggf. kombiniert mit FlagParam). Eine erneute Installation wird bei Vorhandensein unterbunden.

Dateiname: Laufwerk:\Pfad\Datei
z. B. C:\Programme\Adobe\Reader 10.0\Reader\AcroRd32.dll oder auch %ProgramFiles%\Adobe\Reader 10.0\Reader\AcroRd32.dll

Reg.-Key/-ValueName: s. hier
z.B. HKLM\SOFTWARE\Adobe oder HKEY_CURRENT_USER\SOFTWARE\Acrobat Reader\Installer\Path

Backslashs im Namen von Registry-Werten müssen escaped werden. („\ \“ statt „\“)

Angabe: Pflicht (bei Installation)


FlagParam

Zu dem Installations-Flag kann bei Bedarf noch je auf einen zusätzlichen Parameter überprüft werden.

Wird eine Datei als Flag genutzt kann die Version und ein Operator <, >, oder = (Default) zur Überprüfung angegeben werden.
Beispiel: >10.0.1.434 oder 10.0.1.434
Bezogen auf obiges Dateibeispiel würden die Installations-Befehle bei der ersten Angabe ausgeführt werden, wenn die vorhandene Version der AcroRd32.dll kleiner oder gleich der Version 10.0.1.434 ist; bei der zweiten Angabe, wenn die vorhandene Version ungleich 10.0.1.434 ist.

Bei Nutzung eines Registry-Values als Flag kann mit dem FlagParam der darin enthaltene Wert überprüft werden.

Angabe: Optional


IsUpdate

Durch IsUpdate wird die Installationsprüfung geändert. Bei Aktivierung muss das Flag vorhanden, aber FlagParam abweichend sein, damit die Installation durchgeführt wird.

Ist der Parameter deaktiviert (default), wird die Installation durchgeführt, wenn das Flag nicht vorhanden ist, oder FlagParam abweicht.

Es kann also durch Aktivierung dafür gesorgt werden, dass das Update nur ausgeführt wird, wenn eine vorherige Version bereits auf dem System vorhanden ist.

0 – aus
1 – an

Angabe: Optional
Default: 0


Command1 (, Command2, …, Commandn)

Erster (, zweiter, …, n-ter) auszuführender Kommandozeilenbefehl zur Installation der Software.

Soll ein Befehl nur auf einem 32- oder 64-Bit-System ausgeführt werden, kann der Parameter optional um x32 bzw. x64 erweitert werden.

Beispiel:

Command1=…
Command2x32=…
Command2x64=…
Command3x32=…
Command4=…

Auf einem 32-Bit-System werden die Befehle Command1, Command2x32, Command3x32 und Command4 ausgeführt.

Auf einem 64-Bit-Sytem werden die Befehle Command1, Command2x64, Command4 ausgeführt.

(s. auch DemoCPUArch.ini in den im Download enthaltenen Beispielen)

Angabe: Pflicht (bei Installation)


Description1 (, Description2, …, Descriptionn)

Beschreibung zum Kommandozeilenbefehl Commandn. Wird nur in der Bildschirmausgabe verwendet. Auch dieser Parameter kann optional um x32 bzw. x64 erweitert werden, um nur unter entsprechenden Systemen angezeigt zu werden (s. Parameter [Install] – Command).

Angabe: Optional


[Uninstall]


Flag

Datei/Reg-Key/-ValueName an dem erkannt wird, dass eine vorherige Version der Software, welche Deinstalliert werden soll, bereits installiert ist. Ist das Flag vorhanden werden die Deinstallations-Befehle ausgeführt.

Angabe: Pflicht (bei Deinstallation)


FlagParam

Wird eine Datei als Flag genutzt kann die Version zur Überprüfung angegeben werden.
Wird ein Reg-ValueName genutzt kann dessen Wert überprüft werden.
(s. [Install] – FlagParam)

Angabe: Optional


Command1 (, Command2, …, Commandn)

Erster (, zweiter, …, n-ter) auszuführender Kommandozeilenbefehl zur Deinstallation der Software. Auch dieser Parameter kann optional um x32 bzw. x64 erweitert werden, um nur unter entsprechenden Systemen ausgeführt zu werden (s. Parameter [Install] – Command).

Angabe: Pflicht (bei Deinstallation)


Description1 (, Description2, …, Descriptionn)

Beschreibung zum Kommandozeilenbefehl Commandn. Wird nur in der Bildschirmausgabe verwendet. Auch dieser Parameter kann optional um x32 bzw. x64 erweitert werden, um nur unter entsprechenden Systemen angezeigt zu werden (s. Parameter [Install] – Command).

Angabe: Optional


Für das bereits angeschnittene Beispiel Update Adobe Reader 10.0.1 könnte die INI-Datei bspw. so aussehen:

[Product]
Name=Update Adobe Reader 10.0.1
Output=1
LogFile=\\bistron.eu\DFS\Logs\InstallScript\%COMPUTERNAME%.log
WOW64=1

[Install]
Flag=%ProgramFiles%\Adobe\Reader 10.0\Reader\AcroRd32.dll
FlagParam=10.0.1.434
Description1=Installing Adobe Reader Update 10.0.1 (1/1)...
Command1=msiexec.exe /update &quot;\\bistron.eu\DFS\Software\Acrobat Reader\10.0\AdbeRdrUpd1001_Tier1.msp&quot; /passive /norestart

Diese und einige weitere Beispiel-Dateien (PDFCreator, Office 2010, WMDC, …) sind im Download enthalten.

Ausführung

Der Aufruf des Skripts über die Kommandozeile sieht wie folgt aus:

cscript.exe InstallScript.vbs \\Server\Freigabe\MeineInstallation.ini

… und kann natürlich auch beispielsweise per Gruppenrichtlinie als Computer-Startskript eingebunden werden:

Downloads:

Links:

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne
(3 Bewertungen, ⌀: 3,70 / 5)
Loading...

15 Kommentare

  1. wpkg

    warum nicht gleich wpkg?

  2. Björn

    Hi,
    kannst du mir bitte Schreiben was ich mit deinem script am besten in der GPO Startskript Eintrage muss?
    Das Bild von dir ist leider zu klein, kann man nichts drauf erkenne.
    Danke für die Antowrt

  3. Danny Korpan

    Hallo,

    habe noch einen Verbesserungsvorschlag für dein Skript: Praktisch wäre es wenn das Skript überprüfen könnte ob es in einer 32bit oder 64bit Windows Umgebung ausgeführt wird und dann auch entsprechende 32 bzw. 64bit Software installieren würde. Über einen anderen Command Befehler wie Command1x32 und Command1x64.

    • Dennis Bistron

      Hallo Danny,

      danke für den Vorschlag. Ich habe es mir kurz angesehen und denke, dass sich die Funktion architekturspezifische Befehle auszuführen ohne große Umstände hinzufügen lässt. Schicke Dir dazu nachher noch etwas per Mail…

  4. Danny Korpan

    Hi,

    vielen Dank für die schnelle Reaktion!

  5. klaus andres

    Hallo
    bin durch Zufall auf dieses Script gestoßen und finde es echt gut.
    Aber für mich wäre es interessant, das Script so abzuändern, das ich von meinem Rechner aus, auf einem Netzwerk Rechner z.B. Windows Updates installieren kann.
    Kann man das machen?

    Danke und Gruß
    Klaus

    • Dennis Bistron

      Hallo Klaus,

      bei Windows Updates stellte sich mir zuerst die Frage: Warum nicht WSUS? 😉

      Doch zu Deiner Frage:
      Ich denke einer der einfachsten Wege wird sein, das Skript mittels PSExec auf den Netzwerkrechnern auszuführen. Der Befehl, der an Deinem Rechner dann aufgeführt wird, sähe etwa so aus:

      PSExec \<Ziel-PC> cscript.exe <Pfad>InstallScript.vbs <Pfad><INI-Datei>

      MfG
      Dennis

      • Klaus Andres

        Hallo Dennis
        Vielen Dank für deine schnelle Antwort. Auf deine Frage, warum nicht WSUS.
        Die Updates werden bei uns über SMS verteilt. Allerdings schlägt das eine oder andere manchmal fehl. Dann muss ich versuchen, diese manuell nachzuinstallieren.
        Das klappt dann hoffentlich mit deinem Script so, das ich nicht an jeden Rechner laufen muss.

        Danke nochmal und Gruß
        Klaus

  6. henning

    Hei, danke für das tolle Script. Eine kleine Anregung: vielleicht wäre es interessant einen SChalter einzubauen wie „FlagMustExist“ der angibt, ob
    die Flagdatei existieren muss für die Installation (z.B. Updates).

    D.h. Installation nur wenn die Datei existiert aber die Version nicht stimmt.

  7. frank

    Hi,
    ich hab ein kleines Problem mit der Abfrage über einen Registrykey – gezielt geht es mir um die Installation eines SAP-Patches, der in der Registry nirgendwo zu finden ist, außer über den Pfad, über den er mal installiert wurde. Das wäre in dem Fall:

    HKCUSoftwareMicrosoftWindows NTCurrentVersionAppCompatFlagsCompatibility AssistantPersisted
    Dort gibt es einen Wert, der den Pfad als Namen hat, quasi

    \servernameverz1verz2SAP730Patch 730_7_10gui730_7-10010496.exe
    mit dem Wert 1

    Kann ich das irgendwie in die dazugehörige ini packen? Die Suche nach anderen Flags hat mir bislang den letzten Nerv geraubt -.-

    Danke im Voraus.

    • Dennis Bistron

      Hallo Frank,

      die Funktion GetRegValue() verarbeitet den Wert aufgrund der enthaltenen Backslashs nicht korrekt. Werde es mir mal ansehen…

      Update 05.02.:
      Möglichkeit zum Escapen von Backslashs im Namen des Registry-Wert implementiert.

  8. Hans

    Hallo! Klasse Arbeit. Vielen Dank für Deine Mühen. Ich setze es bei uns im Vereinsnetzwerk ein und bin absolut zufrieden. Evtl passe ich das vbs noch an, so dass es messageboxen statt eine commandline Ausgabe macht 🙂

  9. Helge

    das ist ja alles hochinteressant für meinen Job

Kommentar verfassen

Neue Beiträge Oft gelesene BeiträgeNeueste KommentareBlog abonnieren

Gib Deine E-Mail-Adresse an, um diesen Blog zu abonnieren und Benachrichtigungen über neue Beiträge via E-Mail zu erhalten.