pharaun
Goto Top

WSUS Bereinigung-Script Timeout Fehler

Hallo,

ich bin gerade dabei auf mehreren Servern den WSUS zu bereinigen.
Nachdem nun einmalig alles händisch bereinigt wurde soll das nun automatisch per Bereinigungsscript ablaufen.

Hierfür wurde das Bereinigungsscript von Bent (http://bent-blog.de/automatische-wsus-serverbereinigung-mit-tasks-und-s ..) hergenommen und eingerichtet.

Dieses funktioniert soweit auch gut.
Nun kommt aber beim Ausführen des Scripts nach unregelmäßiger Zeit folgender Fehler:

Ausnahme beim Aufrufen von "PerformCleanup" mit 1 Argument(en): "Timeout ür Vorgang Überschritten"
Bei C:\WSUS\WSUS-CleanUp\WSUS-Serverbereinigung.ps1:37 Zeichen:31
+ $CleanupManager.PerformCleanup <<<< ($CleanupScope)
+ CategoryInfo : NotSpecified: (face-smile , MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException


Der Timeout Wert wurde über des SQL-Managment Sudio bereits in den Servereigenschaften unter "Verbindung" - "Remoteserververbindungen" - "Timeout für Remoteabfragen" auf 0 (unendlich) gesetzt.

Dies scheint allerdings nicht der richtige, entscheidende, Wert gewesen zu sein. Es kommt weiterhin zum Timeout.

Deswegen nun die Frage, wo man diesen Timeout Wert festlegen muss/kann, damit das Script auch durchlaufen kann?

LG

Content-ID: 284358

Url: https://administrator.de/contentid/284358

Ausgedruckt am: 26.11.2024 um 03:11 Uhr

Edelweis
Edelweis 01.10.2015 um 13:33:57 Uhr
Goto Top
Hallo Pharaun,

nimm nur das Skript von http://wsus.de/serverbereinigung2, pass es an deine Bedürfnisse/ Gegebenheiten an. Anschliessend einen geplanten Task (geplante Aufgabe) erstellen, in der du dieses Skript einbindest.

Gruß edelweis
Pharaun
Pharaun 01.10.2015 um 14:22:27 Uhr
Goto Top
Hallo Edelweis,

in wie weit soll das was Ändern?
So wie ich das sehe sind dei Script an sich gleich, bis auf das bei dem Script von wsus.de noch eine E-Mail Nachricht versendet wird.

Bitte korrigiere mich wenn ich mich irre face-smile

Script wsus.de

# WSUS Connection Parameters:
[String]$WSUSServer = "FQDN vom WSUS Server angeben"
[Boolean]$useSecureConnection = $False
[Int32]$portNumber = 80
[String]$LogFile = "C:\WSUS\MeinLogfile.txt" #Beispiel!
[String]$SMTPServer = "IP-Adresse vom SMTP Server"


$FileExists = Test-Path $LogFile
If ($FileExists -eq $True) {
#Alte Logdatei vorsichtshalber löschen.
Remove-Item $LogFile
}

[Boolean]$supersededUpdates = $True
[Boolean]$expiredUpdates = $True
[Boolean]$obsoleteUpdates = $True
[Boolean]$compressUpdates = $True
[Boolean]$obsoleteComputers = $False
[Boolean]$unneededContentFiles = $True

#EndRegion VARIABLES

#Region SCRIPT

[void][reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration");

$wsusParent = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer($WSUSServer,$useSecureConnection,$portNumber);

date | out-file -filepath $LogFile -append -noClobber;

$WSUSServer | out-file -filepath $LogFile -append -noClobber;
$CleanupManager = $wsusParent.GetCleanupManager();
$CleanupScope = New-Object Microsoft.UpdateServices.Administration.CleanupScope($supersededUpdates,$expiredUpdates,$obsoleteUpdates,$compressUpdates,$obsoleteComputers,$unneededContentFiles);
$CleanupManager.PerformCleanup($CleanupScope) | out-file -filepath $LogFile -append -noClobber;
#EndRegion SCRIPT

$message = new-object Net.Mail.MailMessage
$mailer = new-object Net.Mail.SmtpClient($SMTPServer)

$message.From = "Absender <Absender@Domain.TLD>"
$message.To.Add("Empfänger <Empfänger@Domain.TLD>")
$MeinText = "WSUS - Server CleanUp Bericht " + $WSUSServer
$message.Subject = $MeinText
$message.Body = [string]::join([environment]::NewLine, (get-content $logfile))
$mailer.Send($message)

#Logdatei löschen.
Remove-Item $LogFile


Script Bent:

#Region VARIABLES

[String]$updateServer = $args
[Boolean]$useSecureConnection = $False
[Int32]$portNumber = $args[1]


[Boolean]$supersededUpdates = $True
[Boolean]$expiredUpdates = $True
[Boolean]$obsoleteUpdates = $True
[Boolean]$compressUpdates = $True
[Boolean]$obsoleteComputers = $True
[Boolean]$unneededContentFiles = $True

#EndRegion VARIABLES

#Region SCRIPT

[void][reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration")

$Wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer($updateServer,$useSecureConnection,$portNumber)

$CleanupManager = $Wsus.GetCleanupManager()
$CleanupScope = New-Object Microsoft.UpdateServices.Administration.CleanupScope($supersededUpdates,$expiredUpdates,$obsoleteUpdates,$compressUpdates,$obsoleteComputers,$unneededContentFiles)
$CleanupManager.PerformCleanup($CleanupScope)

#EndRegion SCRIPT
Edelweis
Edelweis 01.10.2015 aktualisiert um 21:32:35 Uhr
Goto Top
in wie weit soll das was Ändern?
Hast du es ausprobiert? Wenn ja, mit welchem Ergebnis?
Hast du die Bereinigungsskripte mal direkt mit Powershell bzw. mit dem SQL-Express-Studio ausgeführt? Welches Ergebnis?

So wie ich das sehe sind dei Script an sich gleich, bis auf das bei dem Script von wsus.de noch eine E-Mail Nachricht versendet wird.
Nein, sind sie nicht, der Unterschied besteht schon in der Definition der Variablen.

Ich habe erst vor einigen Tagen auch mit der Kombination getestet, aber erfolglos. Führe ich das Skript direkt via Powershell aus, funktionierte es. Auch ein eingenständiger Durchlauf des SQL-Skripts im SQL-Express-Studio lief erfolgreich durch, in Verbindung mit der CMD gab es mehrere Fehlermeldungen. Ich hab es dann recht schnell verworfen, da ich genau wußte, dass die andere Variante sicher läuft.
Was ich nicht getestet habe, wie sich das ganze auf einem SBS verhält, da ich keinen im Einsatz hab.
Edelweis
Edelweis 02.10.2015 um 07:03:36 Uhr
Goto Top
Vielleicht auch noch lesenswert für dich: http://www.wsus.de/cgi-bin/yabb/YaBB.pl?num=1442592416
Hier --> http://www.wsus.de/cgi-bin/yabb/YaBB.pl?num=1442592416/1#1 wird genau die gleiche Fehlermeldung gepostet.
Pharaun
Pharaun 13.10.2015 aktualisiert um 13:06:42 Uhr
Goto Top
Hallo Edelweis,

konnte und endlich ein wenig weiter Testen....

Hast du es ausprobiert? Wenn ja, mit welchem Ergebnis?

Nein hatte ich noch nicht probiert zu diesem Zeitpunkt

Hast du die Bereinigungsskripte mal direkt mit Powershell bzw. mit dem SQL-Express-Studio ausgeführt? Welches Ergebnis?

Ja hatte ich gemacht (schon vor dem Post auf administrator.de), in der Powershell kamen die gleichen Timeouts. Bereinigung über das SQL-Management Studio lief durch

Allerdings muss ich zu meiner verwunderung berichten, das nach einem Serverneustart das Script von Bent Blog nun fehlerfrei durchläuft. Eventuell liegt es auch einfach daran das es nun weniger Updates sind zum Löschen.

In diesem Sinne hat sich das Problem nun gelöst, auch wenn man nicht wirklich warum es nicht ging.

Vielen Dank!
Edelweis
Edelweis 13.10.2015 um 19:35:13 Uhr
Goto Top
Ja hatte ich gemacht (schon vor dem Post auf administrator.de), in der Powershell kamen die gleichen Timeouts. Bereinigung über das SQL-Management Studio lief durch
Hm, komisch, dass es direkt in der Powershell ebenfalls zu den Timeouts kam.
Allerdings muss ich zu meiner verwunderung berichten, das nach einem Serverneustart das Script von Bent Blog nun fehlerfrei durchläuft. Eventuell liegt es auch einfach daran das es nun weniger Updates sind zum Löschen.
Dann laß mindestens das Skript für die Serverbereinigung täglich laufen. Und schön, dass es nun funktioniert.
Vielen Dank!
Gern geschehen.