Softwareverteilung mit einem VBS Script

  • Softwareverteilung mit einem VBS Script

    Anwendungszweck
    Das Softwareverteilungsskript (VBScript) kann zur automatisierten Installation/Aktualisierung von Anwendungen benutzt werden. Es unterstützt ebenfalls die Installation/Aktualisierung aufgrund von Gruppenzugehörigkeiten der Active Directory Computerkonten benutzt werden. Grundsätzlich kann jede Software damit verteilt werden, solange diese sogenannte Silent Parameter unterstützt. Funktioniert für MSI Pakete oder EXE Installationen.


    Erklärungen Parameter
    Grundsätzlich sind alle Funktionen innerhalb des Skripts dokumentiert. Ebenfalls befinden sich bereits einige Demoinstallationen im Skript. Damit die Softwareinstallationen über den Systemaccount des Computers aufgerufen werden können, müssen die Benutzer „NETZWERK, NETZWERKDIENST und SYSTEM“ Zugriffsrechte auf der Freigabe und im NTFS System erhalten.

    Sub Install_Software
    Die Prozedur „Install_Software“ ist für die eigentliche Software Installation zuständig. Die Prozedur muss mit folgenden Parametern aufgerufen werden: Install_Software (Name, Version, Command, RegistryKey)

    Name
    Der Name der zu installierenden Software (dient nur zu Anzeigezwecken im Eventlog).

    Version
    Die korrekte Versionsnummer der zu installierenden Version, welche exakt aus der Registry eines Testclients ausgelesen werden muss.

    Command
    Der auszuführende Installationsbefehl mit allen Parameters (Silent Installation etc.).

    RegistryKey
    Der Registryeintrag, welcher die Versionsnummer der bereits installierten Software beinhaltet.
    Beispiel:
    Install_Software "AdobeReaderXI", "4.2.2579", "msiexec.exe /i " & Chr(34) & "\\servername.intra\DFSroot\Deploy\officeatwork\officeatwork Client Suite.msi" & Chr(34) & " /qn", “HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{243369B6-A51D-46F8-B242-6AC2595558CD}\DisplayVersion"

    Aufgrund des obenstehenden Aufrufs prüft die Prozedur „Install_Software“ den mitgelieferten Registryeintrag. Ist dieser vorhanden, wird dessen Inhalt mit der Versionsnummer verglichen. Ist die Versionsnummer im Registryeintrag tiefer als diejenige, welche als Parameter mitgegeben wird, wird der Installationsbefehl ausgeführt.
    Ist der Registryeintrag nicht vorhanden, wird der Installationsbefehl ebenfalls ausgeführt.

    Anpassungen sind am Skript nötig
    Grundsätzlich muss für jede Software, welche auf allen Computern installiert werden soll, eine Prozedur analog der Beispiele im Skript erstellt werden. Soll eine Software nur auf bestimmten Computern installiert werden, muss eine Sicherheitsgruppe im Active Directory erstellt werden und die entsprechenden Computerkonten darin als Mitglied hinzugefügt werden. Danach muss im Bereich „Run installations depending on group memberships of computers“ eine Abfrage dieser Sicherheitsgruppe eingebaut werden

    Skript aufgerufen
    Das Skript muss als Windows Startup Skript aufgerufen, da dies auf dem Computer und nicht per Benutzer aufgerufen werden muss.

    Code als .vbs Datei speichern

    Brainfuck-Quellcode

    1. '--------------------------------------------------------------------------------------------------------------------
    2. ' Funktion : Software deployment
    3. ' Version : 1.0
    4. ' Beschreibung : Dieses Skript installiert Software basierend auf Gruppenzugehoerigkeiten des Computerkontos
    5. ' Kunde : xxx
    6. '
    7. ' Version 1.0
    8. '
    9. '--------------------------------------------------------------------------------------------------------------------
    10. On Error Resume Next
    11. 'Dim variables
    12. Dim objSysInfo
    13. Dim objComputer
    14. Dim objMemberOf
    15. Dim objConnection
    16. Dim objCommand
    17. Dim objName
    18. Dim objEventLog
    19. Dim strComputerName
    20. Dim strGroup
    21. Dim strEvenlogID
    22. 'Dim contants
    23. Const ADS_SCOPE_SUBTREE = 2
    24. 'Set objects
    25. Set objSysInfo = CreateObject("ADSystemInfo")
    26. Set objEventLog = CreateObject("WScript.Shell")
    27. 'Fill variables
    28. strComputerName = objSysInfo.Computername
    29. strEventlogID = "Software deployment: "
    30. 'Create Active Directory connection
    31. Set objConnection = CreateObject("ADODB.Connection")
    32. Set objCommand = CreateObject("ADODB.Command")
    33. objConnection.Provider = "ADsDSOObject"
    34. objConnection.Open "Active Directory Provider"
    35. Set objCommand.ActiveConnection = objConnection
    36. objCommand.Properties("Page Size") = 10
    37. objCommand.Properties("Timeout") = 30
    38. objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
    39. objCommand.Properties("Cache Results") = False
    40. objName = "LDAP://" & strComputerName
    41. Set objComputer = GetObject(objName)
    42. objEventLog.LogEvent 0, strEventlogID & "Skript gestartet."
    43. 'Check for errors
    44. If Err.Number <> 0 Then
    45. objEventLog.LogEvent 1, strEventlogID & "Fehler " & Err.Number & " (" & Err.Description & ") aufgetreten."
    46. WScript.End
    47. End If
    48. objMemberOf = objComputer.GetEx("memberOf")
    49. 'Run installations for all computers
    50. 'Example installations
    51. 'Example_Install_Greenshot
    52. 'Example_AdobeReaderXI
    53. 'Example_AdobeFlashPlayer
    54. 'Example_Java7
    55. 'Example_AdobeAIR
    56. 'Run installations depending on group memberships of computers
    57. For Each strGroup in objMemberOf
    58. If Instr(strGroup, "sg_softdeploy_") <> 0 Then
    59. Dim strSingleGroup
    60. strSingleGroup = ""
    61. strSingleGroup = Mid(strGroup, Instr(strGroup, "CN=") + 3, Instr(strGroup, ",") -4)
    62. Select Case strSingleGroup
    63. Case "sg_softdeploy_picasa"
    64. 'Example_Install_GooglePicasa
    65. Case "sg_softdeploy_googleearth"
    66. 'Example_Install_GoogleEarth
    67. Case "sg_softdeploy_okpvalidation"
    68. 'Example_Install_OKPValidation
    69. End Select
    70. End If
    71. Next
    72. objEventLog.LogEvent 0, strEventlogID & "Skript beendet."
    73. WScript.Quit
    74. 'Start Picasa installation
    75. Sub Example_Install_GooglePicasa
    76. Install_Software "Picasa", _
    77. "3.9", _
    78. "\\servername.intra\DFSroot\Deploy\picasa\picasa39-setup.exe /S /L", _
    79. "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Picasa 3\DisplayVersion"
    80. End Sub
    81. 'Start Greenshot installation
    82. Sub Example_Install_Greenshot
    83. Install_Software "Greenshot", _
    84. "1.1.7.17", _
    85. "\\servername.intra\DFSroot\Deploy\Greenshot\Greenshot-INSTALLER-1.1.7.17.exe /VERYSILENT /LANG=DE", _
    86. "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Greenshot_is1\DisplayVersion"
    87. End Sub
    88. 'Start Adobe Reader XI installation
    89. Sub Example_Install_AdobeReaderXI
    90. Install_Software "AdobeReaderXI", _
    91. "11.0.06", _
    92. "\\servername.intra\dfsroot\Deploy\AdobeReaderXI\AdbeRdr11006_de_DE.exe /msi EULA_ACCEPT=Yes /qn", _
    93. "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{AC76BA86-7AD7-1031-7B44-AB0000000001}\DisplayVersion"
    94. End Sub
    95. 'Start Adobe Flash Player installation
    96. Sub Example_Install_AdobeFlashPlayer
    97. Install_Software "AdobeFlashPlayer", _
    98. "11.9.900.117", _
    99. "\\servername.intra\DFSroot\Deploy\AdobeFlashPlayer11\install_flash_player_11_active_x.exe -install", _
    100. "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Adobe Flash Player ActiveX\DisplayVersion"
    101. End Sub
    102. 'Start Google Earth installation
    103. Sub Example_Install_GoogleEarth
    104. Install_Software "GoogleEarth", _
    105. "7.1.1.1580", _
    106. "msiexec.exe /i " & Chr(34) & "\\servername.intra\DFSroot\Deploy\GoogleEarth\Google Earth.msi" & Chr(34) & " /qn", _
    107. "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{0A844D8F-A965-11E2-9E77-B8AC6F98CCE3}\DisplayVersion"
    108. End Sub
    109. 'Start Java 7 installation
    110. Sub Example_Install_Java7
    111. Install_Software "Java7", _
    112. "7.0.450", _
    113. "msiexec.exe /i \\servername.intra\DFSroot\Deploy\Java\JRE7U45X86\jre1.7.0_45.msi /qn IEXPLORER=1 ALLUSERS=1 JAVAUPDATE=0 AUTOUPDATECHECK=0", _
    114. "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{26A24AE4-039D-4CA4-87B4-2F83217045FF}\DisplayVersion"
    115. End Sub
    116. 'Start Adobe AIR installation
    117. Sub Example_Install_AdobeAIR
    118. Install_Software "AdobeAIR", _
    119. "3.7.0.1860", _
    120. "\\servername.intra\DFSroot\Deploy\AdobeAIR\AdobeAIRInstaller.exe -silent", _
    121. "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{A0087DDE-69D0-11E2-AD57-43CA6188709B}\DisplayVersion"
    122. End Sub
    123. 'Installation routine
    124. Sub Install_Software(Name, Version, Command, RegistryKey)
    125. 'Dim variables
    126. Dim strSoftware
    127. Dim strVersion
    128. 'Set values into variables
    129. strSoftware = Name
    130. strVersion = Version
    131. 'Check if version in registry is lower or missing
    132. If Read_Registry(RegistryKey) < strVersion Or Read_Registry(RegistryKey) = "Missing" Then
    133. On Error Resume Next
    134. 'Start installation
    135. Dim objShell
    136. Dim objEnv
    137. Set objShell = CreateObject("WScript.Shell")
    138. Set objEnv = objShell.Environment("PROCESS")
    139. objEnv("SEE_MASK_NOZONECHECKS") = 1
    140. objShell.Run Command, 0, True
    141. objEnv.Remove("SEE_MASK_NOZONECHECKS")
    142. 'Check for errors during installation routine
    143. If Err.Number <> 0 Then
    144. objEventLog.LogEvent 1, strEventlogID & "Fehler " & Err.Number & " (" & Err.Description & ") beim Installieren von " & Name & " Version " & Version & " aufgetreten."
    145. Err.Number = 0
    146. End If
    147. End If
    148. End Sub
    149. 'Function to read registry values
    150. Function Read_Registry(RegKey)
    151. On Error Resume Next
    152. Dim objRegistryShell
    153. Dim strReturn
    154. Set objRegistryShell = CreateObject("WScript.Shell")
    155. Read_Registry = objRegistryShell.RegRead(RegKey)
    156. If Err.Number <> 0 Then
    157. objEventLog.LogEvent 1, strEventlogID & "Fehler " & Err.Number & " (" & Err.Description & ") beim Lesen von Key " & RegKey & " aufgetreten."
    158. Read_Registry = "Missing"
    159. End If
    160. End Function
    Alles anzeigen
    [IMG:http://www.fsit.ch/banner/FSIT-Logo_klein.png]

    Wenn "Server" eine Religion ist, haben wir die passende Kathedrale dazu!
    Mehr Infos unter www.fsit.com oder Facebook