WSUS Skript mit AutoIT

  • Hi an @lle,

    ich habe mir mal die "Mühe" gemacht und ein kleines Skript geschrieben, welches einen Client mit einem im Netzwerk befindlichen WSUS 3.0 Server verbinden.
    Ist gestestet und bei uns im Einsatz. Läuft zuverlässig und gut. Wenn euch was auffällt, gerne schreiben :D

    Spoiler anzeigen
    [autoit]


    ;#####################################################################
    ;## Datum: 07.11.2007 ##
    ;## Beschreibung: Tool für automatische WSUS-Updates (Clientseitig) ##
    ;## Copyright (c) MM ##
    ;#####################################################################

    [/autoit] [autoit][/autoit] [autoit]

    #include <Process.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ;TrayTip für die Benutzer als Information
    TrayTip("Überprüfung auf Updates", "Ihr System wird auf Updates überprüft.", 5, 1)
    ;Verisons Info zur Überprüfung der REK-Key Version
    $version = "1.01"

    [/autoit] [autoit][/autoit] [autoit]

    If Not IsAdmin() Then ;Kein Admin und Problematik mit Netzwerk abgefangen!!!!
    RunAsSet('USERNAME', 'DOMÄNE', 'PASSWORT')
    Run(@ScriptFullPath, @ScriptDir, @SW_HIDE)
    RunAsSet()
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    func registry ()
    ;######################################
    ;Ändern der Registry für WSUS
    ;######################################
    ;Löschen der alten REG-Werte
    _RunDos('REG DELETE "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate" /v AccountDomainSid /f')
    _RunDos('REG DELETE "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate" /v PingID /f')
    _RunDos('REG DELETE "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate" /v SusClientId /f')
    _RunDos('REG DELETE "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /f')
    ;Versions Key
    _RunDos('REG ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v KeyVersion /t REG_SZ /d ' & $version)
    ;Eintragen der neuen REG-Werte
    _RunDos('REG ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v WUServer /t REG_SZ /d http://10.43.1.16')
    _RunDos('REG ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v WUStatusServer /t REG_SZ /d http://10.43.1.16')
    _RunDos('REG ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v ElevateNonAdmins /t REG_DWORD /d 0');Benutzer informieren (1) oder nicht (0)
    _RunDos('REG ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v TargetGroupEnabled /t REG_DWORD /d 1')
    _RunDos('REG ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v TargetGroup /t REG_SZ /d ""')
    _RunDos('REG ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v AcceptTrustedPublisherCerts /t REG_DWORD /d 1')
    ;AU
    _RunDos('REG ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v NoAUShutdownOption /t REG_DWORD /d 1')
    _RunDos('REG ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v NoAUAsDefaultShutdownOption /t REG_DWORD /d 1')
    _RunDos('REG ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v AUPowerManagement /t REG_DWORD /d 1')
    _RunDos('REG ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v NoAutoUpdate /t REG_DWORD /d 0')
    _RunDos('REG ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v AUOptions /t REG_DWORD /d 4')
    _RunDos('REG ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v ScheduledInstallDay /t REG_DWORD /d 0')
    _RunDos('REG ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v ScheduledInstallTime /t REG_DWORD /d 5')
    _RunDos('REG ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v UseWUServer /t REG_DWORD /d 1')
    _RunDos('REG ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v DetectionFrequencyEnabled /t REG_DWORD /d 1')
    _RunDos('REG ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v DetectionFrequency /t REG_DWORD /d 4')
    _RunDos('REG ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v IncludeRecommendedUpdates /t REG_DWORD /d 0')
    _RunDos('REG ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v AutoInstallMinorUpdates /t REG_DWORD /d 1')
    _RunDos('REG ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v NoAutoRebootWithLoggedOnUsers /t REG_DWORD /d 1')
    _RunDos('REG ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v RebootRelaunchTimeoutEnabled /t REG_DWORD /d 1')
    _RunDos('REG ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v RebootRelaunchTimeout /t REG_DWORD /d 1440')
    _RunDos('REG ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v RebootWarningTimeoutEnabled /t REG_DWORD /d 1')
    _RunDos('REG ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v RebootWarningTimeout /t REG_DWORD /d 30')
    _RunDos('REG ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v RescheduleWaitTimeEnabled /t REG_DWORD /d 1')
    _RunDos('REG ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v RescheduleWaitTime /t REG_DWORD /d 30')
    ;Deaktivieren von Windows Update Online
    _RunDos('REG DELETE "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\WindowsUpdate" /v DisableWindowsUpdateAccess /f')
    _RunDos('REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\WindowsUpdate" /v DisableWindowsUpdateAccess /t REG_DWORD /d 1')
    ;######################################
    ;Ende Registry
    ;######################################
    EndFunc
    ;Überprüfung, ob REG-Key gesetzt ist
    $reg = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate","KeyVersion")

    [/autoit] [autoit][/autoit] [autoit]

    If $reg == "" Then ;KEY nicht vorhanden
    _RunDos("sc config wuauserv start= auto") ;Setzt Dienst auf automatisch Startart
    _RunDos("net stop wuauserv") ;Beenden des Dienstes
    registry ()
    _RunDos("net start wuauserv") ;Starten des Dienstes,
    _RunDos("wuauclt /resetauthorization /detectnow") ;Registrieren am WSUS Server
    _RunDos("wuauclt /detectnow") ;Anfrage an WSUS Server stellen
    _RunDos("wuauclt /detectnow") ;Anfrage an WSUS Server stellen
    Exit
    EndIf

    If $reg == $version Then ;KEY vorhanden
    _RunDos("sc config wuauserv start= auto") ;Setzt Dienst auf automatisch Startart
    _RunDos("net stop wuauserv") ;Beenden des Dienstes
    Sleep(500)
    _RunDos("net start wuauserv") ;Starten des Dienstes,
    _RunDos("wuauclt /resetauthorization /detectnow") ;Registrieren am WSUS Server
    _RunDos("wuauclt /detectnow") ;Anfrage an WSUS Server stellen
    _RunDos("wuauclt /detectnow") ;Anfrage an WSUS Server stellen
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $reg <> $version Then ;KEY vorhanden, neue Version
    _RunDos("sc config wuauserv start= auto") ;Setzt Dienst auf automatisch Startart
    _RunDos("net stop wuauserv") ;Beenden des Dienstes
    registry ()
    _RunDos("net start wuauserv") ;Starten des Dienstes,
    _RunDos("wuauclt /resetauthorization /detectnow") ;Registrieren am WSUS Server
    _RunDos("wuauclt /detectnow") ;Anfrage an WSUS Server stellen
    _RunDos("wuauclt /detectnow") ;Anfrage an WSUS Server stellen
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    Gruß und viel Spaß damit. Vielleicht kann es jemand gebrauchen :)

    2 Mal editiert, zuletzt von hessebou (15. November 2007 um 06:31)

  • Zitat

    Original von Gun-Food
    Wir nutzen dafür eine Gruppenrichtlinie, die es automatisch macht.


    Geht leider bei NT4 Server nicht so wirklich :D
    Des Weiteren hat das Skript den Vorteil, das er die Clients sofort nach Updates nachfragen, quasi ein manuelles Anstoßen. Ist in manchen Fällen evtl. wichtig.

  • Ich würde mal vorschlagen, die _RunDos('REG ... Befehle mit regwrite / -read / -delete zu erstetzen

  • Zitat

    Original von progandy
    Ich würde mal vorschlagen, die _RunDos('REG ... Befehle mit regwrite / -read / -delete zu erstetzen


    Hatte ich vor, nur das Problem ist, dass die Benutzer keine Rechte haben die Registry zu ändern. Deshalb auch die Abfrage mit NotAdmin RunAsSet. Mit Hilfe dieses Befehls werden alle "Run"-Befehle unter einem anderen Benutzer (welcher die Berechtigungen hat) ausführt.
    Wenn jemand eine andere Lösung hat gerne :D

    • Offizieller Beitrag

    Hallo,

    RunAsSet funktioniert nur mit den Funktionen Run und RunWait. Ich glaube nicht das RunAsSet auch mit _RunDos funktioniert.

    Schau dir mal Probleme beim Zugriff auf Netzfreigabe an!

  • Zitat

    Original von bernd670
    Hallo,

    RunAsSet funktioniert nur mit den Funktionen Run und RunWait. Ich glaube nicht das RunAsSet auch mit _RunDos funktioniert.

    Doch getestet und funktioniert ;) Hätte ich auch nicht gedacht, aber es geht.
    Den Thread habe ich für mein anderes Problem gebraucht, danke. Neuer Code ist oben schon drin.