[Gelöst] WSUS-Paket automatisiert mehrfach aufrufen

Antworten
d.karsten
Beiträge: 40
Registriert: 02 Jan 2014, 15:50

[Gelöst] WSUS-Paket automatisiert mehrfach aufrufen

Beitrag von d.karsten »

Hallo zusammen,

aus dem OPSI-Wiki haben wir das Skript für ein WSUS-Paket (die Variante, die ein VB-Skript aufruft). Das VB-Skript haben wir durch ein Powershell-Skript ersetzt, was auch soweit funktioniert.
Nun ist unser Ziel, dass ein Rechner nach dem Aufsetzen solange das WSUS-Paket ausführt, bis keine Updates mehr gefunden werden. Es soll aber nicht bei jedem Systemstart wieder aufgerufen werden, da es schon recht lange dauert, selbst wenn es nichts findet - also kein Always-Skript.

Was wir versucht hatten, war die Anzahl der gefundenen Updates zurückzugeben und anhand dieser eine Abfrage im Skript zu machen: steht noch eine Anzahl größer 0 aus, setze das Paket erneut auf Setup. Das funktioniert leider nicht - wir vermuten, dass das Paket diesen Anforderungsstatus nach erfolgreichem Abschließen des Pakets wieder überschreibt. (Syntaktisch war der Aufruf korrekt, für ein anderes Softwarepaket hat es funktioniert.)

Nun die Frage, wie könnte man das in OPSI realisieren?

Viele Grüße,
d.karsten
Zuletzt geändert von d.karsten am 13 Mär 2017, 14:23, insgesamt 1-mal geändert.
Benutzeravatar
ngbr
Ex-uib-Team
Beiträge: 130
Registriert: 27 Sep 2010, 11:41

Re: WSUS-Paket automatisiert mehrfach aufrufen

Beitrag von ngbr »

Hi d.karsten,

es gibt die Möglichkeit, ein Paket als Exit - Status auf setup stehen zu lassen, indem man mit 'isSuspend' rausgeht.

kurz operhalb dieses Kapitels http://download.uib.de/opsi4.0/doc/html ... ecsections ist das beschrieben.

klappt das ?
---
hoping to help :)

if your problem was solved, pls mark this thread as 'SOLVED'. thank you .

-- no PN support --

Andre
d.karsten
Beiträge: 40
Registriert: 02 Jan 2014, 15:50

Re: WSUS-Paket automatisiert mehrfach aufrufen

Beitrag von d.karsten »

Hallo,

das ist fast genau was wir suchen, vielen Dank!
Allerdings sollte der Rechner nach einem Block von Updates automatisch neustarten und von vorn beginnen. Setzt man das ExitWindows-Kommando vor "isSuspended", liest er das nicht mehr, setzt man es dahinter, kommt er nicht zum Neustart. Gibt es eine Möglichkeit das zu verbinden?

Viele Grüße,
d.karsten
harb
Beiträge: 7
Registriert: 01 Feb 2017, 09:15

Re: WSUS-Paket automatisiert mehrfach aufrufen

Beitrag von harb »

Hallo,

um dieses Problem zu lösen habe bei uns ein PS Script geschrieben welches vorab (grob) überprüft in welchem "Windows-Update-Stadium" sich der Rechner befindet. Die Angaben beziehen sich hauptsächlich auf Win7 Maschinen könnten aber auch auf höhere Versionen funktionieren. (WU-Fix installiert & Systemupdates installiert, WU-Fix installiert & Systemupdates fehlen!, WU-Fix fehlt!) Mit WU-Fix ist gemeint das bei neu installierten w7 Rechnern zuerst der Windows Update Agent aktualisiert werden muss um sehr lange Wartezeiten bei der Suche zu vermeiden.

Es läuft ungefähr folgendermaßen ab:
- überprüfen ob neustart erforderlich?
- "Windows-Update-Stadium" bestimmen .. (check_preq.ps1)
- anhand des Rückgabewerts entsprechende Aktionen ausführen


INSTALL.INS - Ausschnitt

Code: Alles auswählen

	winbatch_check4reboot
	set $ExitCode$ = getLastExitCode
	if ($ExitCode$ = "1")
		comment "ExitCode 1 .. Neustart erforderlich"
		ExitWindows /ImmediateReboot
	endif

	Winbatch_processExplorer /LetThemGo

	winbatch_stop_wusvc
	winbatch_checkupdates
	Set $ExitCode$ = GetLastExitCode

	Switch $ExitCode$
		Case "0"
			comment "WU-Fix installiert & Systemupdates installiert. Fertig!"
			winbatch_start_wusvc
			
			winbatch_install_onlineUpdates
			winbatch_check4reboot
			set $ExitCode$ = getLastExitCode
			if ($ExitCode$ = "1")
				comment "ExitCode 1 .. Neustart erforderlich"
				ExitWindows /ImmediateReboot
			endif
			
			comment "Online Windows Update"
			winbatch_install_onlineUpdates
			ExitWindows /Reboot
		EndCase
		Case "5"
			comment "WU-Fix installiert & Systemupdates fehlen!"
			DosBatch_install
			ExitWindows /ImmediateReboot
		EndCase
		Case "9"
			comment "WU-Fix fehlt!"
			comment "Offline Windows Update ueber WSUS offline Update"
			Winbatch_install_preq
			ExitWindows /ImmediateReboot
		EndCase
	EndSwitch


[winbatch_stop_wusvc]
powershell.exe -ExecutionPolicy Bypass -File "%SCRIPTPATH%\stopWUSvc.ps1"

[winbatch_check4reboot]
powershell.exe -ExecutionPolicy Bypass -File "%SCRIPTPATH%\PendingReboot.ps1"

[winbatch_checkupdates]
powershell.exe -ExecutionPolicy Bypass -File "%SCRIPTPATH%\check_preq.ps1"

[Winbatch_install_preq]
net stop wuauserv
%SystemRoot%\system32\wusa.exe %SCRIPTPATH%\installfiles\wu_fix\windows6.1-kb3212642-x64.msu /quiet /norestart
net stop wuauserv
%SystemRoot%\system32\wusa.exe %SCRIPTPATH%\installfiles\wu_fix\Windows6.1-KB3177467-x64.msu /quiet /norestart
net stop wuauserv
%SystemRoot%\system32\wusa.exe %SCRIPTPATH%\installfiles\wu_fix\windows6.1-kb3172605-x64.msu /quiet /norestart
net stop wuauserv
%SystemRoot%\system32\wusa.exe %SCRIPTPATH%\installfiles\wu_fix\windows6.1-kb3212646-x64.msu /quiet /norestart

[Winbatch_processExplorer]
%SystemRoot%\system32\cmd.exe /C "%SCRIPTPATH%\procexp.exe" /accepteula

[DosBatch_install]
start /B /D %SCRIPTPATH%\installfiles\wsusou\cmd %SystemRoot%\System32\cmd.exe /C %SCRIPTPATH%\installfiles\wsusou\cmd\DoUpdate.cmd /verify /updatecpp /instdotnet4 /updatetsc /instwmf

[winbatch_start_wusvc]
net start wuauserv
ping -n 4 127.0.0.1

[winbatch_install_onlineUpdates]
powershell.exe -WindowStyle "Maximized" -ExecutionPolicy Bypass -File "%SCRIPTPATH%\runWU_online.ps1"


check_preq.ps1

Code: Alles auswählen

$updates                = @{KB3172605=$false;KB3177467=$false;KB3212642=$false;KB3212646=$false;}
$requiredUpdate         = "KB3212646"                   # Ein update vom letzten patchday angeben um "grob" festzustellen ob aktuelle updates installiert sind 
[array] $updatelist     = get-hotfix | select HotFixID              
[array] $keys           = $updates.keys                 # Workaround

foreach($key in $keys) {
    if ($updatelist -match $key){
     $updates.Set_Item($key, $true)
    }
}

if ($updates.values -notcontains $false) {
    if ($updatelist -match $requiredUpdate) {
        write-output "WU-Fix installiert & Systemupdates installiert";exit 0
    }
    else {
        write-output "WU-Fix installiert & Systemupdates fehlen!";exit 5
    }
    }
else {
        write-output "WU-Fix fehlt!"; exit 9
}

Das Script ist alles andere als schön aber vielleicht kannst du was davon verwenden.
d.karsten
Beiträge: 40
Registriert: 02 Jan 2014, 15:50

Re: WSUS-Paket automatisiert mehrfach aufrufen

Beitrag von d.karsten »

Hallo,

das klingt interessant. Allerdings habe ich mich beim Durchlesen deines Skripts gefragt, wie du dort eine Art Schleife mit realisierst? Die Switch-Case-Anweisung müsste doch beim Aufruf des Pakets einmal durchlaufen werden und eine der Abfrage entsprechende Aktion durchführen, wenn ich das richtig verstanden habe.

Viele Grüße,
d.karsten
trabs-ol
Beiträge: 64
Registriert: 07 Dez 2011, 10:46

Re: WSUS-Paket automatisiert mehrfach aufrufen

Beitrag von trabs-ol »

Hi,

wir haben das bei uns mit Mix aus OPSI und einem Powershell Script gelöst. Folgendes passiert:

OPSI prüft, ob PS in der Version >= 4 installiert ist, wenn nein installiert OPSI zuerst das Paket nach.
Danach wird das PS Script aufgerufen.

Im PS Script wird folgendes geprüft:

1. Ist die Installationszeit des Clients jünger als 1 Tag -> Dann handelt es sich um eine Neuinstallation des Clients und es müssen Updates installiert werden. Ist die Installationszeit älter als 1 Tag handelt es sich um einen "Bestands-Client" -> Hier läuft das Script nur nach 19 Uhr, damit der User nicht an der Anmeldung gehindert wird (Bei uns werden alle Rechner am Wochenende um 20 Uhr zu Wartungszwecken aufgeweckt).

2. Sind wird im vorgesehenen Zeitfenster wird per Powershell die Windows Update API angesprochen und nach Updates gesucht. Werden welche gefunden, so wird so lange installiert und rebootet, bis keine Updates mehr gefunden werden. Zusätzlich wird per Windows Forms ein Fenster in den Vordergrund gestellt, welches den User grafisch über den Fortschritt der Updates informiert (Installiere Update 1 von X).

Bei Interesse kann ich die Scripte mal ins Wiki einstellen.

Getestet bei uns unter Windows 7x64. Läuft seit Jahre ohne Probleme...

VG
Lars

EDIT sagt: Zusätlich schreibt das Script noch ein schönes Log auf dem Client.
d.karsten
Beiträge: 40
Registriert: 02 Jan 2014, 15:50

Re: WSUS-Paket automatisiert mehrfach aufrufen

Beitrag von d.karsten »

Hallo,

also hast du den Updatevorgang, bis keine Updates mehr gefunden werden, auch im Powershell-Skript realisiert?
Die Skripte würden mich sehr interessieren - klingt als wäre das genau das, was bei uns noch fehlt.

Viele Grüße,
d.karsten
trabs-ol
Beiträge: 64
Registriert: 07 Dez 2011, 10:46

Re: WSUS-Paket automatisiert mehrfach aufrufen

Beitrag von trabs-ol »

So. Fertig!

wiki/doku.php?id=userspace:windows_updates_-_powershell

Ich musste da etwas von unserer CI und einigen spezifischen Paket-Abhängikeiten entfernen. Wenn ich keinen Fehler gemacht habe, sollte das so laufen. Ansonsten eben wieder hier melden!

VG
Lars
harb
Beiträge: 7
Registriert: 01 Feb 2017, 09:15

Re: WSUS-Paket automatisiert mehrfach aufrufen

Beitrag von harb »

d.karsten hat geschrieben:Hallo,

das klingt interessant. Allerdings habe ich mich beim Durchlesen deines Skripts gefragt, wie du dort eine Art Schleife mit realisierst? Die Switch-Case-Anweisung müsste doch beim Aufruf des Pakets einmal durchlaufen werden und eine der Abfrage entsprechende Aktion durchführen, wenn ich das richtig verstanden habe.

Viele Grüße,
d.karsten
Das wiederholte Ausführen des OPSI Pakets geschieht durch die Anweisung "ExitWindows /ImmediateReboot" diese führt zu einem Neustart des Clients ohne das der Actionrequest (Setup) zurückgesetzt wird. Das Bedeutet der Client führt nach dem Neustart wieder das WindowsUpdate Paket aus bis irgendwann das script "check_preq.ps1" den Return value 0 zurück gibt.

Code: Alles auswählen

Neu installierter Client:
boot1:
- check_preq.ps1 = returnval 9           # kein aktueller WU-Agent
- installation Winbatch_install_preq & neustart   # Installation des aktuellen WU-Agents

boot2:
- check_preq.ps1 = returnval 5          # WU-Agent installiert aber die Windows Updates fehlen
- installtion DosBatch_install & neustart      # Installation der WindowsUpdates über Wsus Offline update ( optional)

-  ...                                                # zwischendurch sind mehrere Neustarts möglich  

bootx: 
- check_preq.ps1 = returnval 0          # WU-Agent & Windows Updates installiert
- winbatch_install_onlineUpdates      # Abschließend wird nochmal über den Online WSUS überprüft 
Windows Update PowerShell Module gibts unter https://gallery.technet.microsoft.com/s ... dff796b0bc
d.karsten
Beiträge: 40
Registriert: 02 Jan 2014, 15:50

Re: WSUS-Paket automatisiert mehrfach aufrufen

Beitrag von d.karsten »

Hallo,

sorry für die späte Antwort!
ExitWindows /ImmediateReboot hat unser Problem gelöst, vielen Dank!

Viele Grüße,
d.karsten
Antworten