Bents Blog

 

Ein IT Blog mit Themen aus dem Windows Server Umfeld.

Automatische WSUS Serverbereinigung mit Tasks und Skripten

Die Windows Updates Services (aktuelle Version 3.0 SP2) kennt jeder versierte Serveradministrator. Als zentraler Server lädt er entsprechend der Konfiguration alle Microsoft Updates herunter und verteilt diese innerhalb der eigenen Organisation. Dazu benötigt der WSUS eine eigene Datenbank, entweder ein SQL Server 2005 Express Edition (frei zum Download verfügbar) oder – sofern vorhanden – einen vollwertigen SQL Server. Viel wichtiger aber ist Speicherplatz, denn der WSUS muss ja alle Updates für die Rechner der Organisation vorhalten.

Update vom 1. September 2015

Mittlerweile ist eine neue Version des Artikels unter Windows Server Update Services (WSUS) auf Windows Server 2012 mit automatischer Bereinigung auf diesem Blog verfügbar. Damit einhergehend steht auch eine neue Version 2013 des Skriptes WSUS-CleanUp.zip zum Download bereit.

Da dieser Artikel in meiner Statistik der meist aufgerufene Artikel ist und immer wieder Fragen zu Problemen auftauchen, bitte genauer lesen. Der angegebene Link auf die neue, überarbeitete Version des Artikels enthält u. A. viele Hinweise im Zusammenhang mit Sicherheitsproblemen (PowerShell und IE ADS).

Den WSUS setzen wir in vielen Kundenumgebungen ein, beim Small Business Server wird er automatisch installiert, in anderen Umgebungen bringt er bereits bei wenigen Server- und Client-Rechnern viele Vorteile. Allerdings hat auch der WSUS einen Nachteil – er verlangt nach einer regelmäßigen Wartung. Dies kann manuell geschehen, indem in der Konsole der Update Services unter [Optionen] der Assistent für die Serverbereinigungaufgerufen wird.

Grundsätzlich eine gute Sache, aber ich bin ein Freund von möglichst integrierter Automatisierung. Auch das ist beim WSUS möglich. Bei WSUS.DE gibt es ein auf PowerShell basierendes Skript mit dem sich die Serverbereinigung direkt starten läßt.

Allerdings gibt das Skript nur Speicherplatz von nicht mehr benötigten Updates auf der Festplatte frei, die Datenbank SUSDB bleibt davon leider unberührt. Aus diesem Grund habe ich versucht das Skript von WSUS.DE zu optimieren und hier mein Ergebnis vorstellen:

Anleitung

Zuerst bitte die folgenden Skripte WSUS-CleanUp.zip herunterladen und in ein Verzeichnis entpacken. Dort finden sich dann folgende Dateien:

WSUS-Serverbereinigung.cmd
WSUS-Serverbereinigung.ps1
WsusDBMaintenance.sql

Das PowerShell Skript (WSUS-Serverbereinigung.ps1) stammt – wie oben erwähnt – von wsus.de, ich habe lediglich den Port-Parameter als Übergabewert in das zentrale Skript (WSUS-Serverbereinigung.cmd) verlagert. Das SQL Skript habe ich mir aus dem Script Center von Microsoft Technet heruntergeladen und nicht verändert.

Update vom 13. März 2013

Dank des Hinweises von Hans und der Frage von Christoph (siehe Kommentare) habe ich das oben genannte SQL Skript (WsusDBMaintenance.sql) doch angepasst. Dabei habe ich die folgenden letzten vier Zeilen hinzugefügt:

--Delete sync history
PRINT 'Delete sync history.' + convert(nvarchar, getdate(), 121)
DELETE FROM tbEventInstance WHERE EventNamespaceID = '2' AND EVENTID IN ('381', '382', '384', '386', '387', '389')
GO

Der Befehl bewirkt, dass aus der WSUS-Datenbank alle alten Synchronisierungseinträge entfernt werden. Dadurch war eine Anpassung oder Änderung des Aufruf-Skriptes (WSUS-Serverbereinigung.cmd) nicht notwendig. Weitere Informationen zum Löschen der Synchronisierungseinträge findet man bei wsus.de.

Anpassung an die eigene Umgebung

Vor der ersten Ausführung müssen im zentralen Skript (WSUS-Serverbereinigung.cmd) einige wichtige Einstellungen getroffen werden:

WSUSPATH=<Pfad zu den Skripten>
WSUS-SERVER=<Servername>
PORT-NUMBER=<Portnummer>
DATABASECONNECT=np:\\.\pipe\MSSQL$MICROSOFT##SSEE\sql\query
SQLCMD="%ProgramFiles%\Microsoft SQL Server\90\Tools\Binn\sqlcmd.exe"

In der Variable WSUSPATH muss der Pfad angegeben ohne finalen Backslash (\) werden, an dem sich die Skripte befinden. Der Servername in WSUS-SERVER bedarf keiner weiteren Erklärung.

Bei PORT-NUMBER muss der Port des WSUS im IIS angegeben werden (auf einem Small Business Server ist das im Standard der Port 8530, nutzt der WSUS die Standardwebseite eines IIS dann lautet der Port 80).

Nutzt der WSUS eine SQL Server Express Datenbank kann die Einstellung für DATABASECONNECT belassen werden (Named Pipes), sonst ist der SQL Servername einzutragen.

Der Pfad für den Aufruf des SQL Servertools sqlcmd.exe (SQLCMD) ist von dem Betriebssystem abhängig: bei 32 Bit lautet die Variable %ProgramFiles% bei 64 Bit %ProgramFiles(x86)% – natürlich abhängig von der Version des SQL Servers bzw. des Abfragetools sqlcmd.exe

Wer die Datei sqlcmd.exe auf seinem Server vermisst, hat sicher die integrierte Windows-Datenbank installiert,  für die Installtion des fehlenden Kommandozeilentools benötigt man das Befehlszeilen-Abfragetool von SQL Server

  • SQLServer2005_SQLCMD.msi für 32 Bit Systeme
  • SQLServer2005_SQLCMD_x64.msi für 64 Bit Systeme

des Feature Pack für SQL Server. Für die grafische Verwaltung der Datenbank (und des SQL-Servers) lädt man sich einfach das Microsoft SQL Server Management Studio Express herunter und installiert selbiges.

Ich empfehle – so habe ich es auf unseren Systemen umgesetzt – das zentrale Skript WSUS-Serverbereinigung.cmd als Programmaufruf für einen neuen geplanten Task (bei 2003, Aufgabenplanung bei 2008) zu nutzen, welcher wöchentlich 1 mal (der Samstag Vormittag hat sich als Optimum herausgestellt) gestartet werden sollte. In Produktivumgebungen sollte selbstverständlich vor der ersten Ausführung eine Sicherung der SUSDB durchgeführt werden.

Ausführung

Was geschieht nun aber nach dem Aufruf des zentralen Skriptes? Zu Beginn wird eine Protokolldatei WSUS-CleanUp.log im selben Verzeichnis erstellt, in dem alle Aktionen eingetragen werden. Danach bewirkt der Aufruf von PowerShell in Zeile 18 mit dem Befehl

Set-ExecutionPolicy Remotesigned

dass PowerShell Skripte ausgeführt werden dürfen, die selbst geschrieben und nicht digital signiert wurden.

Die Ausführung des PowerShell-Skriptes WSUS-Serverbereinigung.ps1 von WSUS.DE selbst geschieht in der nächsten Zeile 19, hier werden die Parameter WSUS-Server und Port übergeben. Nach der Bereinigung der WSUS-Dateien wird das SQL Skript von Technet gestartet, welches die SUSDB reindiziert und reorganisiert. Die darauf folgenden Zeilen verkleinern im Anschluss die Datenbank sowie die Datenbankdateien.

Je nach dem wie lange keine Serverbereinigung des WSUS durchgeführt wurde (außerdem wie viele Clients vom WSUS versorgt werden sowie die Leistung des Servers), kann es passieren, dass allein das PowerShell-Skript bis zu 36 Stunden(!) läuft. Deshalb als Task einplanen und laufen lassen – bei einem erneuten Aufruf dauert die gesamte Skriptverarbeitung ca. 30 Minuten. Wem das immer noch zu viel ist, kann natürlich alle Aufrufe des SQLCMD Tools auskommentieren oder löschen.

Fazit

Wie immer, für Verbesserungsvorschläge, Kritik oder Fragen bin ich immer offen und freue mich über jederzeit über einen Kommentar.

Einen Blog am Leben zu erhalten kostet Zeit und Geld. Da ich auf meiner Seite weder Werbung einbinde, noch andersweitige Zuwendungen erhalte, freue ich mich über jede kleine Spende. Einfach und unkompliziert geht das über PayPalMe. Du unterstützt damit diesen Blog. Vielen Dank.

65 Kommentare für “Automatische WSUS Serverbereinigung mit Tasks und Skripten”

  • Paul

    Moin,

    die Scripte http://bit.ly/mh9232
    liegen da nicht mehr, sind also nicht mehr download-bar.

    Gruss

  • Bent Schrader

    Hallo Paul,

    habe es eben getestet, der Download funktioniert bei mir ohne Probleme?

    Gruß,
    Bent

  • Paul

    huch jetzt gehts wieder einwandfrei.

    :-)

  • Michael

    Hallo Bent,

    vielen Dank für deine Skripte und deinen Blogeintrag!

    Ich habe mir die Skripte via http://bit.ly/mh9232
    heruntergeladen.

    Hast du auf lange Zeit gesehen irgendwelche Probleme oder Inkonsistenzen in deinen WSUS-DBs bekommen ?

    Viele Grüße
    Michael

  • Bent Schrader

    Hallo Michael,

    vielen Dank für Dein positives Feedback.

    Zu Deiner Frage kann ich Dir von mehreren Kundensystemen berichten, bei denen ich das Skript bereits seit etwa 10 Monaten ohne einen Fehler (bzw. Probleme) wöchentlich einmal laufen lasse.

    Gruß,
    Bent

  • Tobi

    Heute drauf gestoßen. Danke für die Skripte!

  • Automatische WSUS Serverbereinigung mit Tasks und Skripten | WSUSpraxis

    […] Automatische WSUS Serverbereinigung mit Tasks und Skripten – Link […]

  • Jürgen

    Hallo Bent,
    wir haben hier ein hybrides Netz aus 2003 und 2008 mit einem 2008er DC.
    Ich hätte noch eine freie 2003er Server Lizenz. Ist die auf 2003 laufende WSUS Version ausreichend oder würdest Du die Anschaffung einer 2008er Lizenz empfehlen?

  • Bent Schrader

    Hallo Jürgen,

    für den Einsatz eines WSUS-Servers ist das Betriebssystem (2003 oder 2008) völlig egal. Du brauchst also keine extra OS-Lizenz zu erwerben, da die WSUS-Version (aktuell 3.0 SP2) auf allen Plattformen gleich ist.

    Viel Erfolg beim Aufsetzen!

    Gruß,
    Bent

  • Mister X

    Sehr guter Artikel – aber was mache ich, wenn ich die „Windows Internal Database“ verwende, dort gibt es keine sqlcmd.exe?!?

  • Bent Schrader

    Hallo Mister X,

    ich verweise einfach mal auf einen weiteren Artikel von mir: http://bit.ly/yMmuUQ

    Das sollte Dir weiterhelfen.

    Gruß,
    Bent

  • Mike

    Hallo Bent,

    Als erstes… genialer Blog!

    Jezt meine Frage… macht die WSUS DB Maintenance auch bei der Verwendung der internal DB Sinn…?
    Ist da das Verhalten gleich, wie bei SQL…?

    Gruss
    Mike

  • Bent Schrader

    Hallo Mike,

    entschuldige die späte Antwort, aber besser spät als nie. Ja, die Verwendung des Maintenance Skriptes macht auch bei der Windows Internal Database Sinn. Die Funktionalität ist die Gleiche. (Letztendlich ist das eine etwas abgespeckte SQL Server Version.)

    Gruß,
    Bent

  • Johannes Vilsmeier

    Ich habe das Problem, dass im Log steht:

    Die Datei „C:WSUSCLEANERWSUS-CleanupWSUS-Serverbereinigung.ps1“ kann nicht g
    eladen werden. Die Datei „C:WSUSCLEANERWSUS-CleanupWSUS-Serverbereinigung.ps
    1“ ist nicht digital signiert. Das Skript wird auf dem System nicht ausgefhrt.
    Weitere Informationen erhalten Sie mit „get-help about_signing“..
    Bei Zeile:1 Zeichen:55
    + C:WSUSCLEANERWSUS-CleanupWSUS-Serverbereinigung.ps1 <<<< localhost 80
    + CategoryInfo : NotSpecified: (:) [], PSSecurityException
    + FullyQualifiedErrorId : RuntimeException

    Laut google muss ich vorher in der PowerShell das hier ausführen:

    Set-ExecutionPolicy RemoteSigned
    das bestätige ich dann wohl mit J?

    Das hat keine Veränderung gebracht, kann mir wer helfen?

  • Bent Schrader

    Hallo erst einmal Johannes – ich finde es gut, wenn die Höflichkeitsformen auf meinem Blog gewahrt werden.

    Wie in meinem Artikel beschrieben steht, ruft das Hauptskript in Zeile 18 bereits den Befehl zur Ausführung nicht signierter PowerShell Skripte auf. Ich vermute, dieser schlägt bereits fehl.

    Was meldet denn der Powershell-Befehl: Get-ExecutionPolicy -List ?
    Vielleicht hilft Dir auch folgender Eintrag weiter: http://bit.ly/Rg9AuQ

    Gruß,
    Bent

  • Johannes Vilsmeier

    Hallo Bent,

    Danke für die schnelle Antwort. Ab jetzt werde ich natürlich auf die Höflichkeitsformen achten.
    Den Link habe ich durchgearbeitet. Auch wenn bei mir nicht alles so lief wie beschrieben, war dennoch unter (Administrative Vorlagen, Windows Komponenten, Windows PowerShell: Skriptausführung aktivieren) die Einstellung falsch gesetzt. Habe dies berichtigt

    Hier gebe ich die Ausgabe des Befehls Get-ExecutionPolicy -List durch, ich hoffe es kommt in einer passablen Formatierung an:

    Scope ExecutionPolicy
    —– —————
    MachinePolicy Undefined
    UserPolicy RemoteSigned
    Process Undefined
    CurrentUser Undefined
    LocalMachine RemoteSigned

    Die Ausführung des Cleanups beginnt im Log hiermit:

    Cleanup Report für [localhost] (Port: 80)
    ————————————————————-
    Die Datei „C:WSUSCLEANERWSUS-CleanupWSUS-Serverbereinigung.ps1“ kann nicht g
    eladen werden. Die Datei „C:WSUSCLEANERWSUS-CleanupWSUS-Serverbereinigung.ps
    1“ ist nicht digital signiert……..

    Die Ausführung von

    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope UserPolicy

    bringt immer noch dieselbe Fehlermeldung wie vorher:
    „Set-ExecutionPolicy : Ausführungsrichtlinie kann nicht festgelegt werden. Ausführungsrichtlinien im MachinePolicy- oder UserPolicy-Bereich müssen über Gruppenrichtlinien festgelegt werden.“

    Es ist übrigens ein SBS2011.

    Die nachfolgende SQL Server Wartung läuft (so weit ich erkennen kann) gut durch.

    Ist hier grundlegend etwas mit den Einstellungen falsch? Leider habe ich den SBS nicht installiert, eventuell sind noch irgendwelche „falsche“ Standardkonfigurationen?

    Gruß,
    Johannes

  • Johannes Vilsmeier

    Hallo Bent,

    Update: Ein Neustart des SBS scheint das Problem behoben zu haben…

    Ich nehme an den Schritten aus http://bit.ly/Rg9AuQ (wie oben bereits genannt) hilft ein darauf folgender Neustart.

    Vielen Dank an Bent für die schnelle Hilfe!

    Gruß,
    Johannes

  • Hans

    Super Skript, habe es noch ein wenig erweitert, damit die Synchronisationanzeige aufgeräumt wird (vgl. http://bit.ly/SHEFrO
    ).

    Klappt wunderbar und ich freue mich über weniger manuelle Arbeit :)

  • Marcel

    Hallo Alle

    Super sache, hatte ich so etwa ein Jahr am laufen, problemlos!!
    Nun habe ich den WSUS auf Server 2012 gehoben und per Rolle installiert.
    Leider kann ich die Datenbank nicht ausfindig machen….
    Hat da jemand schon erfahrung?
    Cleanup geht jedoch immer noch 1A!
    Gruss und Danke für die tollen Scripts und Tips!

  • Sven

    Hallo Bent und alle Blogleser,

    ich versuche gerade dieses Script auf meine Konfiguration anzupassen.

    Info zu Konfiguration:
    WSUS läuft auf einem Windows Server 2012
    Die Datenbank auf einem weiteren Windows Server 2012 mit SQL Server 2012

    Der Kopf der WSUS-Serverbereinigung.cmd:
    set PATH=C:ScripteWSUS-CleanUp
    set WSUS-SERVER=Server1.domäne.local
    set PORT-NUMBER=8530
    set DATABASECONNECT=Server2.domäne.local
    set SQLCMD=“%ProgramFiles%Microsoft SQL Server110ToolsBinnsqlcmd.exe“

    Die Fehlermeldung aus dem LOG:
    Cleanup Report für [Server1.domäne.local] (Port: 8530)
    ————————————————————-
    Der Typ [Microsoft.UpdateServices.Administration.AdminProxy] wurde nicht
    gefunden: Vergewissern Sie sich, dass die Assembly, die diesen Typ enth„lt,
    geladen ist.
    In C:ScripteWSUS-CleanUpWSUS-Serverbereinigung.ps1:32 Zeichen:1
    + $Wsus =
    [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer($u …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ~~~
    + CategoryInfo : InvalidOperation: (Microsoft.Updat…tion.AdminP
    roxy:TypeName) [], RuntimeException
    + FullyQualifiedErrorId : TypeNotFound

    Es ist nicht m”glich, eine Methode fr einen Ausdruck aufzurufen, der den NULL
    hat.
    In C:ScripteWSUS-CleanUpWSUS-Serverbereinigung.ps1:35 Zeichen:1
    + $CleanupManager = $Wsus.GetCleanupManager()
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

    New-Object : Der Typ [Microsoft.UpdateServices.Administration.CleanupScope]
    kann nicht gefunden werden. Stellen Sie sicher, dass die Assembly, die diesen
    Typ enth„lt, geladen wird.
    In C:ScripteWSUS-CleanUpWSUS-Serverbereinigung.ps1:36 Zeichen:17
    + $CleanupScope = New-Object
    Microsoft.UpdateServices.Administration.CleanupScope( …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ~~~
    + CategoryInfo : InvalidType: (:) [New-Object], PSArgumentExcepti
    on
    + FullyQualifiedErrorId : TypeNotFound,Microsoft.PowerShell.Commands.NewOb
    jectCommand

    Es ist nicht m”glich, eine Methode fr einen Ausdruck aufzurufen, der den NULL
    hat.
    In C:ScripteWSUS-CleanUpWSUS-Serverbereinigung.ps1:37 Zeichen:1
    + $CleanupManager.PerformCleanup($CleanupScope)
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

    ————————————————————-
    Ende Dateibereinigung: 17.11.2012 um 21:57:56,39 Uhr

    Entschuldigung für das lang Copy / Paste

    Kann mir bei dem Problem jemand weiterhelfen?
    Danach funktioniert das Script einwandfrei

    Vielen Dank schon einmal

    Gruß Sven

  • H

    Hallo,

    ein sehr nützliches Script – VIELEN DANK!!!
    Aber einen kleinen Schönheitsfeler hat die Sache noch:

    mit „set PATH=“

    Setzt man die Systemvariable PATH auf den Pfad zum Script und löscht alle anderen, was weitreichende Folgen für z.Bsp. andere Scripte, Programme, etc. haben kann.

    Grüße H.

  • Bent Schrader

    Hallo H,

    vielen Dank für den wertvollen Hinweis, ich habe die Dokumentation und das Skript soeben korrigiert.

    Gruß,
    Bent

  • Wolfgang Schneider

    Hallo,

    ich lasse das Tool nun schon seit einigen Monaten wöchentlich laufen, wie ich jetzt gemerkt habe bricht das *.ps1 script nach einigen Std. ab, im Log steht folgendes:Start der Datenbankbereinigung: 30.12.2012 um 3:05:01,26 Uhr
    =============================================================

    Cleanup Report für [WOLF-SERVER] (Port: 8530)
    ————————————————————-
    Ausnahme beim Aufrufen von „PerformCleanup“ mit 1 Argument(en): „Timeout ist a
    bgelaufen. Das Zeitlimit wurde vor dem Beenden des Vorgangs berschritten oder
    der Server reagiert nicht.“
    Bei L:WSUSToolsWSUS-Serverbereinigung.ps1:37 Zeichen:31
    + $CleanupManager.PerformCleanup <<<< ($CleanupScope)
    + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException

    ————————————————————-
    Ende Dateibereinigung: 30.12.2012 um 4:56:10,52 Uhr

    SQL Server Wartung (Connect np:\.pipeMSSQL$MICROSOFT##SSEEsqlquery )
    ————————————————————-
    Der Datenbankkontext wurde auf 'SUSDB' ge„ndert.
    Estimating fragmentation: Begin. 2012-12-30 04:56:58.607
    Number of indexes to rebuild: 30
    Estimating fragmentation: End. 2012-12-30 04:57:18.400….
    usw.

    Der SQL teil läuft dann weiter.

    woran könnte der Timeout Fehler oben liegen?

    Vielen Dank!
    Wolfgang Schneider

  • Bent Schrader

    Hallo Wolfgang,

    ich habe den Fehler zwar selber noch nicht gesehen, ich würde dein Problem in der Konfiguration der Timeout-Werte für die SQL Transaktionen sehen – vielleicht testest du einmal mit höheren Werten?

    Details siehe hier: http://bit.ly/10e0Dsw

    Gruß,
    Bent

  • Snaker

    Hallo Herr Schrader,

    ich hoffe, Sie könnten mir vielleicht mit Ihrem Script weiterhelfen. Ich benutze ebenso wie manch anderer die Interne SQL-DB von Microsoft, also die abgespeckte Version ohne SQLCMD. Ihr Link zu dem SharePoint-Eintrag hat mir nicht weitergeholfen. Ich will keine grafische Oberfläche installieren, um einen DB-Connect via Konsole erreichen zu können. Eine SQLCMD von einem SQL 2008r2 in das Programmverzeichnis vom WSUS-SQL zu kopieren klappt freilich ebenfalls nicht. Welche Möglichkeiten bleiben mir dann noch? Ein Komprimieren der DB sollte doch auch mit anderen Mitteln möglich sein, oder nicht? Ich halte es nur wenig sinnvoll, zum Schaffen von Speicherplatz erst ein extra Programm zu installieren, das ich eigentlich nicht bräuchte. Sollte es keine Möglichkeit geben, würde ich versuchen, die Bereinigung vom SQL-Server (der NICHT die WSUS-DB hostet) aus laufen zu lassen.

    PS: Als kleine Verbesserung würde ich empfehlen, den absoluten Pfad zur Powershell.exe auszulassen. In der Umgebungsvariable von Windows %PATH% ist der korrekte und aktuelle Installationspfad zu dieser EXE hinterlegt. So bleibt das Script noch gültig, auch wenn sich z. B. durch eine Aktualisierung von PS der Pfad einmal ändert. Ist die Umgebungsvariable nicht gesetzt, ist somit auch kein PS installiert und das Script würde eh nicht laufen. Dies könnte man ggf. vorher noch abfangen, um das Script nicht in den Fehler hineinlaufen zu lassen. Z. B. ginge das, indem man abfragt, ob die Variable %PSMODULEPATH% gesetzt ist. Theoretisch könnte man auch gleich mit %PSMODULEPATH%..powershell.exe“ arbeiten ;-)

    Danke schon mal

    Snaker

  • Tom

    Hallo zusammen,
    vielen Dank an Bent für dieses Script!
    Ich selbst habe jetzt mehrere Stunden damit verbraucht das Script auf einem Windows 2008 R2 zum Laufen zu bringen. Die ExecutionPolicy der PowerShell hat mich fast zum Verzweifeln gebracht bis ich einmal einen Rechtsklick auf die PS1 Datei gemacht habe und dort zufällig unter Eigenschaften, ganz unten, den mir bislang unbekannten Eintrag „Sicherheit“ mit dem Hinweis „Die Datei stammt von einem anderen Computer. Der Zugriff wurde aus Sicherheitsgründen eventuell blockiert.“ gefunden habe. Nach dem Klick auf „Zulassen“ war der Spuk vorbei und das Script hat sich starten lassen und funktioniert einwandfrei. Ich möchte diese Info hier in Bent’s Blog hinterlassen falls andere auf das selbe Problem stoßen und daran fast verzweifeln wie ich zuerst.

    Grüße
    Tom

  • Andreas Hennig

    Hallo Bent,

    das ist das Script auf das die Welt gewartet hat… nur leider offensichtlich nicht auf meinem Server…

    Ich lasse bei mir einen SBS 2011 Standard laufen, in dem ja, wie Du schon geschrieben hast, der WSUS gleich integriert ist. Nun habe ich Deine Parameter nach bestem Wissen und Gewissen angepasst und laufe dennoch in einen Fehler:

    Also zuerst einmal meine Anpassungen:
    set WSUSPATH=F:WSUSBereinigung
    set WSUS-SERVER=Mike-Emily
    set PORT-NUMBER=8530
    set DATABASECONNECT=np:\.pipeMSSQL$MICROSOFT##SSEEsqlquery
    set SQLCMD=“%ProgramFiles(x86)%Microsoft SQL Server90ToolsBinnsqlcmd.exe“

    und hier die Fehlermeldung:
    Start der Datenbankbereinigung: 08.03.2013 um 15:39:02,07 Uhr
    =============================================================

    Cleanup Report für [Mike-Emily] (Port: 8530)
    ————————————————————-
    Ausnahme beim Aufrufen von „GetUpdateServer“ mit 3 Argument(en): „Der Typenini
    tialisierer fr „Microsoft.UpdateServices.Internal.Constants“ hat eine Ausnahme
    verursacht.“
    Bei F:WSUSBereinigungWSUS-Serverbereinigung.ps1:32 Zeichen:78
    + $Wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer
    <<<< ($updateServer,$useSecureConnection,$portNumber)
    + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException

    Sie k”nnen keine Methode fr einen Ausdruck mit dem Wert NULL aufrufen.
    Bei F:WSUSBereinigungWSUS-Serverbereinigung.ps1:35 Zeichen:42
    + $CleanupManager = $Wsus.GetCleanupManager <<<< ()
    + CategoryInfo : InvalidOperation: (GetCleanupManager:String) [],
    RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

    Sie k”nnen keine Methode fr einen Ausdruck mit dem Wert NULL aufrufen.
    Bei F:WSUSBereinigungWSUS-Serverbereinigung.ps1:37 Zeichen:31
    + $CleanupManager.PerformCleanup <<<< ($CleanupScope)
    + CategoryInfo : InvalidOperation: (PerformCleanup:String) [], Ru
    ntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

    ————————————————————-
    Ende Dateibereinigung: 08.03.2013 um 15:39:05,75 Uhr

    SQL Server Wartung (Connect np:\.pipeMSSQL$MICROSOFT##SSEEsqlquery )
    ————————————————————-
    ————————————————————-
    Ende der Datenbankbereinigung: 08.03.2013 um 15:39:05,77 Uhr
    =============================================================

    Derselbe Fehler tritt übrigens auch auf, wenn ich anstatt des Servernamens die IP-Adresse eingebe.

    Hast Du irgendeinen Tipp für mich?

    Danke
    Andreas

  • Bent Schrader

    Hallo Andreas,

    leider nicht wirklich.

    Läuft das Skript auf Deinem Server, oder startest Du es remote? Letzteres funktioniert leider nicht, da die WSUS API nur lokal aufgerufen werden kann.

    Andernfalls starte das Skript bitte mal als Administrator. Bei meiner Suche bin ich nur hier http://bit.ly/10D1Klz
    fündig geworden.

    Gruß,
    Bent

  • Christoph

    Hallo Bent!
    Ich kann mich nur anschließen, genau was ich gesucht habe, danke!

    Habe nur eine Frage dazu, da ich mit SQL nicht wirklich viel am Hut habe.
    Wenn ich das Skript damit erweitern möchte was Hans vorgeschlagen hat (Sync-Protokoll http://bit.ly/SHEFrO), wie gehe ich da vor?
    Ich vermute mal dass ich bloss deine cmd mit folgender Zeile erweitern muss:
    %SQLCMD% -I -S %DATABASECONNECT% -i >> „%LOG%“

    Ist das so richtig?

    LG,
    Christoph

  • Christoph

    Hoppla, anscheinend hat dein Blog einen Teil der Zeile gefressen. :-)
    2. Versuch:
    %SQLCMD% -I -S %DATABASECONNECT% -i %Sync-Skript% >> “%LOG%”

    Nochwas, kann man dieses Sync-Skript evtl. auch so einstellen dass es die letzten 7 Tage übrig läßt?

  • Bent Schrader

    Hallo Christoph,

    ich habe ein neues ZIP-Paket bereitgestellt. Einfach neu herunterladen – die Erläuterung steht weiter oben als Update von heute.

    Gruß,
    Bent

  • Christoph

    Wow, das ging ja schnell!

    Danke für die Mühe!

    LG,
    Christoph.

  • Mohnenfluh

    Hallo

    Habe eine Frage an euch, wenn ich syncronisieren möchte bekomme ich diese fehlermeldung.

    WebException: Fehler bei der Anforderung mit folgender Fehlermeldung:

    Object moved
    Object moved to here.

    –.
    bei System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
    bei System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
    bei Microsoft.UpdateServices.ServerSyncWebServices.ServerSync.ServerSyncProxy.GetAuthConfig()
    bei Microsoft.UpdateServices.ServerSync.ServerSyncLib.InternetGetServerAuthConfig(ServerSyncProxy proxy, WebServiceCommunicationHelper webServiceHelper)
    bei Microsoft.UpdateServices.ServerSync.ServerSyncLib.Authenticate(AuthorizationManager authorizationManager, Boolean checkExpiration, ServerSyncProxy proxy, Cookie cookie, WebServiceCommunicationHelper webServiceHelper)
    bei Microsoft.UpdateServices.ServerSync.CatalogSyncAgentCore.SyncConfigUpdatesFromUSS()
    bei Microsoft.UpdateServices.ServerSync.CatalogSyncAgentCore.ExecuteSyncProtocol(Boolean allowRedirect)

    Hab eine standart wsus vom Windows 2008 r2.
    Wir hatten vorher keinen wsus installiert.
    Kann ich eventuell auch die wsus 3.0 instalieren.
    Was mache ich falsch, oder was könnte ich ändern.

    Der Server über den ich die Wsus verteilen möchte ist ein virtueller Server.
    Hab alle standart einstellungen übernommen was mir der Assistent vorgeschlagen hat.

    Da ich neu in der Branche bin kenn ich nur die Theorie, und mit Praxis Problemen weiss ich nicht was ich anfangen soll.

    Würde mich auf Hilfe freuen

    Lg

  • Bent Schrader

    Hallo Mohnenfluh,

    kleiner Tipp: Egal für welche Branche – es gibt, nicht nur bei Google, sondern auch hier im Blog eine Suche. Außerdem schau mal im unteren Abschnitt unter „Ähnliche Beiträge“. Falls Du immer noch nicht weiter kommst, hier der direkte Link: http://bit.ly/10Z5FFq

    Gruß,
    Bent

  • Matthias

    Hallo,

    danke für das Script.
    Ich bin über die Seite
    http://bit.ly/13Pikzg

    drauf gestossen.
    Es läuft jetzt bei mir auf unserem neuen WSUS auf WS2012.

    Einen Verbesserungvorschlag hätte ich anzubieten.
    Im Sript „WSUS-Serverbereinigung.ps1“ fänd ich es gut, wenn die deutschen Bezeichnungen aus dem GUI bei den Bereinigungsvariabeln stehen würden.

    Ich möchte nämlich nicht alles automatisch bereinigen und habe einige Variablen mit „$False“ deaktiviert.

    Ich habe hier mal die deutschen Bezeichnungen reingeschrieben und hoffe, dass die auch zu den Variablen passen.
    Evtl. kann das jemand prüfen und einen Kommentar abgeben.

    Ausschnitt aus WSUS-Serverbereinigung.ps1:
    ————————————————–

    # Ersetzte Updates
    [Boolean]$supersededUpdates = $False
    # Abgelaufene Updates
    # Decline updates that aren’t approved and have been expired my Microsoft.
    [Boolean]$expiredUpdates = $True
    # Nicht verwendete Updates und Updaterevisionen (Teil 1)
    # Delete updates that are expired and have not been approved for 30 days or more.
    [Boolean]$obsoleteUpdates = $False
    # Nicht verwendete Updates und Updaterevisionen (Teil 2)
    # Delete older update revisions that have not been approved for 30 days or more.
    [Boolean]$compressUpdates = $False
    # Computer, die keine Verbindung mit dem Server herstellen
    # Delete computers that have not contacted the server in 30 days or more.
    [Boolean]$obsoleteComputers = $False
    # Nicht erforderliche Updatedateien
    # Delete update files that aren’t needed by updates or downstream servers.
    [Boolean]$unneededContentFiles = $True

    ————————————————–

    Gruß
    Matthias

  • Oliver Hirsch

    Ich habe folgendes Problem…
    In dem heute runtergeladenen ZIP-Archiv steht in Zeile 18 des CMD-Skripts direkt der PowerShell-Aufruf des Cleanup-Skripts. Laut Anleitung und mehrerer Kommentare sollte das erst in der Zeile 19 stehen und in Zeile 18 irgendein Aufruf, der das Signier-Problem des PS-Skripts löst. Diese „magische“ Zeile fehlt bei mir im CMD des Downloads und ich habe genau das Problem, dass im LOG nun die Fehlermeldung „…Die Datei „…WSUS-Serverbereinigung.ps1″ ist nicht digital signiert. Das Skript wird auf dem System nicht ausgefhrt.“ Ist das ein Fehler im Download oder habe ich irgendwas nicht mitgekriegt?

    Hier noch zwei kleine Verbesserungsvorschläge:
    set WSUSPATH=%~dp0
    Setzt die Variable WSUSPATH auf den Pfad (inkl. Laufwerk) des Skripts, in dem das steht (also auf den Pfad, in dem die „WSUS-Serverbereinigung.cmd“ liegt). Da dort auch die restlichen Komponenten liegen, macht das i.d.R. Sinn.
    set WSUS-SERVER=%COMPUTERNAME%
    Funktioniert bei lokaler Ausführung auf dem WSUS selber (was die Regel sein dürfte) und verringert den Konfigurationsaufwand weiter.

    MfG
    Oliver Hirsch

  • Bent Schrader

    Hallo Oliver,

    vielen Dank für die Hinweise, ich werde selbige demnächst mit einarbeiten.

    Für das Powershell Problem lies bitte den aktuellen Artikel http://bit.ly/13Pikzg
    (Abschnitt Ausführung) auf den ich mehrfach verwiesen habe.

    Gruß,
    Bent

  • Oliver Hirsch

    Hallo nochmals,

    habe das Problem nun mit folgenden Zeilen für mich zumindest lösen können…

    18: „%SystemRoot%system32WindowsPowerShellv1.0powershell.exe“ Set-Executionpolicy -scope CurrentUser -executionPolicy Bypass >> „%LOG%“
    Set-Executionpolicy -scope CurrentUser -executionPolicy Bypass
    19: „%SystemRoot%system32WindowsPowerShellv1.0powershell.exe“ „%CLEANUPSCRIPT%“ %WSUS-SERVER% %PORT-NUMBER% >> „%LOG%“
    20: „%SystemRoot%system32WindowsPowerShellv1.0powershell.exe“ Set-Executionpolicy -scope CurrentUser -executionPolicy undefined >> „%LOG%“

    Dies setzt die ExecutionPolicy nur für den Benutzer, der das Skript ausführt, auf „ByPass“. Bei mir hatte nämlich sowohl die Einstellung „RemoteSigned“ als auch „Unrestricted“ dazu geführt, dass es entweder gar nicht ging oder nur mit expliziter Bestätigung (Eingabe [M]), was bei einer geplanten Aufgabe natürlich nicht praktikabel ist. ;)
    Nach dem eigentlichen Aufruf des Cleanup-Skripts wird die Policy wieder zurück auf „undefined“ gesetzt.
    Quelle: http://bit.ly/11MGGoB

    Übrigens handelt es sich bei meinem Server um einen Windows-Server 2008 Standard SP2 (also kein R2).

    Vielleicht hilft das ja jemanden ebenfalls weiter…

    Viele Grüße,
    Oliver Hirsch

  • Oliver Hirsch

    Hallo Bent,

    sorry, hatte den Überblick verloren… Nachdem ich nun in den Eigenschaften der PS-Datei bei „Sicherheit“ auf „Zulassen“ geklickt habe, funktioniert es auch mit der Policy „RemoteSigned“.

    Ich würde vorschlagen, dass dann dieser Teil aus der anderen Anleitung hier noch ergänzt wird?!
    Außerdem machen meine neue Zeilen um die vorhandene Zeile 18 dann event. dennoch Sinn (allerdings mit „RemoteSigned“ anstatt „ByPass“), da man damit weniger am System verändern muss. Die Warnung der PowerShell beim Umstellen der Policy für die ganze Maschine (LocalMachine) ist ja durchaus berechtigt und wäre mit den beiden Zeilen nicht notwendig. ;)

    Ansonsten aber super Skript und Danke für Deine Arbeit!
    Nur die gelöschten Synchronisationen finde ich nicht so gut und habe ich entfernt. Hier werde ich bei Gelegenheit mal schauen, wie man dieses Statement einschränken kann, dass nur Synchronisationen älter < 1 Monate o.ä. gelöscht werden…

    Viele Grüße

  • Bent Schrader

    Hallo Oliver,

    vielen Dank für Deine Arbeit und Unterstützung! Ich werde – sobald es meine Zeit zulässt – die Anpassungen einpflegen und hier auf in der Anleitung aktualisieren.

    Viele Grüße aus Dresden,
    Bent

  • Oliver Hirsch

    Bevor Du 2 Mal ansetzen musst, habe ich mal direkt nach dem Synchronisations-DELETE-Filter gesucht – und auch was gefunden…

    DELETE FROM tbEventInstance WHERE EventNamespaceID = ‚2‘ AND EVENTID IN (‚381‘, ‚382‘, ‚384‘, ‚386‘, ‚387‘, ‚389‘) AND DATEDIFF(month, TimeAtServer, CURRENT_TIMESTAMP) >= 3

    Die Ergänzung „AND DATEDIFF(month, TimeAtServer, CURRENT_TIMESTAMP) >= 3“ sorgt dafür, dass nur Einträge älter als 3 Monate gelöscht werden.

    Quelle: http://bit.ly/1adDrOZ
    (Kommentar von Markus am 15. Nov 2011)

    Finde ich so besser! ;)

    Erneute Grüße,
    Oliver Hirsch

  • Uwe

    Hallo Bent,
    Danke, funktioniert auf 2003 x64 problemlos (nachdem ich die im Text erwähnte Zeile18 ergänzt habe).
    WSUS Standardinstallation mit Windows Internal DB.
    SQL Native Client und sqlcmd nachinstalliert.
    Powershell war durch Windows Update schon drauf.
    Gruß aus Berlin
    Uwe

  • Marc K.

    Guten Tag Bent

    Ich setzte Ihr Script auf SBS 2011 nun seit gut 2 Wochen ein. Ich liess es 1 x täglich laufen.
    Es funktioniert bestens. Ich werde jetzt die Häufigkeit auf 1 x wöchentlich reduzieren.

    Ein kleiner Schönheitsfehler:
    Wenn das Script startet erhalte ich von meinem Server eine Mail, dass der Update-Service beendet wurde.

    *******************************************************************************
    Im Netzwerk wurde eine Warnung erkannt. Es empfiehlt sich, das Problem näher zu untersuchen.

    Computer: XY
    Erstellungsdatum/-uhrzeit: 26.11.2013 21:00:46
    Titel: Ein wichtiger Dienst der Windows-Dienste wird nicht ausgeführt.
    Quelle: Wichtige Windows-Dienste
    Beschreibung:
    Der Update Services Dienst wurde beendet.

    *******************************************************************************

    Natürlich wäre es einfach, diese Mail-Benachrichtigung für alle Zeit abzuschalten. Nur werde ich dann im Ernstfall auch nicht mehr benachrichtigt.

    Meine Frage: Liesse sich das Script nicht dahingehend verändern, dass beim Start zuerst die Benachrichtigung abgeschaltet wird, das Script durchläuft und zum Schluss die Benachrichtigung wieder eingeschaltet wird.

    Ich weiss nicht, ob dieselbe Benachrichtigung auch bei vollwertigen Servern ausgegeben wird oder ob es sich hier um eine Spezialität des SBS handelt.

    Grüsse aus Bern
    Marc

  • Sam

    Hallo Bent

    Vielen Dank für dein Script und deine Arbeit.
    Noch ein Hinweis: beim Script WSUS-Serverbereinigung.cmd ist der Pfad für die Variable SQLCMD auf %ProgramFiles%Microsoft SQL Server90ToolsBinnsqlcmd.exe.
    Ich habe bei mir ein Windows SBS Server 2011 mit einem MS SQL 2008 R2 (intern).
    Das sqlcmd.exe war nicht dabei und da habe ich das SQL Server® 2008 R2 Feature Pack installiert.
    Dabei bemerkte ich dass der SQLCMD Pfad dabei nicht mehr im Verzeichnis 90 sondern 100 liegt (%ProgramFiles%Microsoft SQL Server100ToolsBinnsqlcmd.exe).
    Möglicherweise ist da ein Unterschied ob SQL 2005 und SQL 2008…

    Super Tool, auch wenn ich noch mit Timeouts kämpfe. Habe aber dein Link zum SQL Timeout grad implementiert und teste bald.

    Grüsse
    Sam

  • Andreas

    Hallo,

    ich bekomme nach dem Start folgende Fehlermeldung:
    Der Befehl „-I“ ist entweder falsch geschrieben oder
    konnte nicht gefunden werden.

    Woran kann das liegen?

    Grüsse Andreas

  • Sam

    Hallo

    Habe das gleiche Problem wie Andreas vor mir….
    Kenne mich leider mit SQL nicht sehr gut aus…

    Gruss Sam

  • Jonas

    Hallo zusammen:

    —————————————————————
    Lösung für das Timeout-Problem bei WSUS3.0.
    —————————————————————
    Ich setze SBS2011 ein, ist aber mit Sicherheit auch bei anderen Systemen so.

    Ursprung des Problems: Keine regelmäßige Wartung der WSUS-Datenbank (SUSDB)
    Problem für den Timout: Leistung des Servers (v.a. bei SBS ein Problem, mit Exchange usw.)
    Lösung:
    1. Maintenance-Script von oben auf dem Server ausführen.

    2. Serverbereinigung testen, dabei erstmal alle Punkte einzeln ausführen und beobachten, bei welchem Punkt der Timeout auftritt. Das ist vermutlich der oberste Punkt.

    3. SQL-Server-Manager starten und mit der Datenbank verbinden:
    —————————————————————
    \.pipemssql$microsoft##sseesqlquery
    —————————————————————

    4. Rechtsklick auf
    \.pipemssql$microsoft##sseesqlquery
    links im Baum (oberstes Element). Wähle „Neue Abfrage“.

    5. Die nicht weiter benötigten Updates abfragen mit
    —————————————————————
    USE SUSDB
    GO
    exec spGetObsoleteUpdatesToCleanup
    —————————————————————

    6. In der Ergebnisliste stehen die Updates mit „LocalUpdateID“. Man nehme die erste ID und „löscht“ das Update mit dem Kommando
    —————————————————————
    USE SUSDB
    GO
    exec spDeleteUpdate @localUpdateID=######
    —————————————————————
    wobei ###### natürlich für die „LocalUpdateID“ steht. Man kann ebenfalls mehrere Updates „löschen“ indem man mehrere Spalten angibt, z.B.
    —————————————————————
    USE SUSDB
    GO
    exec spDeleteUpdate @localUpdateID=######
    exec spDeleteUpdate @localUpdateID=######
    exec spDeleteUpdate @localUpdateID=######
    —————————————————————

    7. Der Befehl wird dann erfolgreich ausgeführt und man kann die Serverbereinigung erneut testen.

    TIPP: Notiert euch am besten die Gesamtzahl der mit unter Punkt 5. aufgelisteten Updates. Falls die Serverbereinigung erneut fehlschlägt, wiederholt das Vorgehen mit dem manuellen Löschen des obersten Updates. Hier solltet ihr feststellen, dass sich die Gesamtzahl der Updates auch durch die Ausführung der Serverbereinigung verringert, nicht nur durch eure manuellen Löschvorgänge!

    Wer des Englischen mächtig ist, liest einfach noch das hier, da steht das Gleiche:
    http://bit.ly/1pkx8Bm

    Wenn ihr die Serverbereinigung soweit habt, dass sie überhaupt sichtbar anfängt, ihr also einen kleinen blauen Balken seht, dann dürft ihr euch zurücklehnen und das Ding laufen lassen. Auch wenn ich keine Erklärung dafür habe, sobald ich etwas blaues gesehen habe, gab es bei meinen (ingesamt 7 WSUS) Maschinen keinen Timeout mehr. Meine Minimumzeiten für etwa 6000 „obsolete Updates“ liegen bei 23 Stunden, meine Maximalzeiten bei 46 Stunden.

  • Jonas

    Update für oben:
    Unter SBS2011 und vermutlich auch unter diversen anderen Betriebssysteme muss der Befehl für den Aufruf der WsusDBMaintenance.sql-Datei folgendermaßen lauten:
    —————————————————————
    sqlcmd -I -i WsusDBMaintenance.sql -S \.pipeMSSQL$MICROSOFT##SSEEsqlquery > reindex.txt
    —————————————————————
    wobei das reindex.txt nur ein Logfile ist, das im selben Ordner angelegt wird. Der Pfad zur WsusDBMaintenance.sql muss natürlich gegebenenfalls angepasst werden.

    LG

  • Jonas

    In meinen vorherigen Einträgen muss direkt vor den Pfad
    .pipeMSSQL$MICROSOFT##SSEEsqlquery
    jeweils noch ein
    backslash backslash punkt
    Irgendwie wird das zensiert. Vielleicht kann „Bent“ das noch ergänzen.

  • Jonas

    backslashbackslash.backslashpipeMSSQL$MICROSOFT##SSEEsqlquery

  • Jonas

    Alternativ und 1000 mal einfacher:

    1. Rechtsklick auf
    \.pipemssql$microsoft##sseesqlquery
    links im Baum (oberstes Element).
    2. Wähle „Eigenschaften“.
    3. Wähle „Verbindungen“.
    4. Setze „Timeout für Remoteabfragen“ auf 0 (= kein Timeout).

  • Frank

    Hallo zusammen,

    vielen Dank erstmal für das tolle skript!

    es läuft super bis auf eine Fehlermeldung

    Cleanup Report für [SRVEFF01] (Port: 80)
    ————————————————————-
    Ausnahme beim Aufrufen von „PerformCleanup“ mit 1 Argument(en): „Timeout ist a
    bgelaufen. Das Zeitlimit wurde vor dem Beenden des Vorgangs berschritten oder
    der Server reagiert nicht.“
    Bei D:WSUS-CleanUpWSUS-Serverbereinigung.ps1:37 Zeichen:31
    + $CleanupManager.PerformCleanup <<<< ($CleanupScope)
    + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException

    ————————————————————-
    Ende Dateibereinigung: 22.01.2015 um 13:42:12,97 Uhr

    kann mir da jemand jemand helfen da ich echt keine SQL Leuchte bin

    danke im Voraus

  • eDonkey

    Vielen Dank für Jonas´ ersten Post vom 28.August 2014
    Nachdem ich auf dieser Weise das erste Update gelöscht hatte, lieferte der Bereinigungs-Assistent keinen Time-Out mehr.
    Den Time-Out auf „Null“ zu setzen, hatte ich vorher schon ausprobiert, das brachte aber nix.

  • digital unterschreiben

    Danke hab es nach Anleitung gemacht und es hat auf Anhieb geklappt.

  • Raphael

    bekomme folgende PS Fehlermeldung

    Ausnahme beim Aufrufen von „GetUpdateServer“ mit 3 Argument(en): „Die angegebene Zeichenfolge ist ungültig.
    Parametername: ServerName“
    Bei C:WSUS-CleanUpWSUS-Serverbereinigung.ps1:32 Zeichen:78
    + $Wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer <<<< ($updateServer,$useSecureConnectio
    n,$portNumber)
    + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException

    Sie können keine Methode für einen Ausdruck mit dem Wert NULL aufrufen.
    Bei C:WSUS-CleanUpWSUS-Serverbereinigung.ps1:35 Zeichen:42
    + $CleanupManager = $Wsus.GetCleanupManager <<<< ()
    + CategoryInfo : InvalidOperation: (GetCleanupManager:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

    Sie können keine Methode für einen Ausdruck mit dem Wert NULL aufrufen.
    Bei C:WSUS-CleanUpWSUS-Serverbereinigung.ps1:37 Zeichen:31
    + $CleanupManager.PerformCleanup <<<< ($CleanupScope)
    + CategoryInfo : InvalidOperation: (PerformCleanup:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

  • Bent Schrader

    Zunächst erst einmal Hallo Raphael,

    ich weiß nicht, was Du hier von mir erwartest, aber unter Angabe keiner Informationen wird Dir auch niemand helfen können.

    Schönen Abend noch,
    Gruß Bent

  • Jan

    Hallo,

    Ich habe den gleichen Fehler wie Raphael,

    dieser kommt direkt nach dem Aufrufen der WSUSU-Serverbereinigung.ps1.

    Welche Infos brauchen Sie noch?

    Gruß
    Jan

  • Bent Schrader

    Hallo Jan,

    welches OS und welche Version des WSUS wird verwendet?
    Scheinbar ist das dritte Argument ($portnumber) in Eurem Fall bei dem Aufruf nicht zulässig.
    Falls das bei Dir ein W2012 ist, ersetze bitte im Skript die Zeile 32 durch:

    $wsus = Get-WSUSServer -Name $updateServer -Port $portNumber

    Dies sollte funktionieren. Bitte gib mir ein Feedback.
    Danke,
    Bent

  • R3ka

    Hallo Bent,

    erstmal besten Dank für das Script!
    Nur ahbe ich ein kleines Problem.
    Wenn ich in der *.ps1 den Wert „[Boolean]$compressUpdates“ auf True setze und das Script laufen lasse bekomme ich im log folgende Meldung:

    Ausnahme beim Aufrufen von „PerformCleanup“ mit 1 Argument(en): „Database ID 5
    , page (1:32643), slot 9 for LOB data type node does not exist. This is usually
    caused by transactions that can read uncommitted data on a data page. Run DBCC
    CHECKTABLE.“
    Bei E:WSUSWSUS-Serverbereinigung.ps1:42 Zeichen:31
    + $CleanupManager.PerformCleanup <<<< ($CleanupScope)
    + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException

    Ich kann damit leider nicht viel anfangen?!

    vG R3ka

  • Armin

    Hi,
    welche Änderungen sind erforerlich wenn der WSUS nur SSL Anfragen annimmt, also auf Port 8531?

    Müssen hier URLs angepasst werden?

  • Hartmut Grimm

    Hallo Bent,
    auch von mir erstmal ein Herzliches Dankeschön für dein Skript.
    Auch bei mir hat es lange gedauert bis ich es endlich hinbekommen habe.
    Erst die Probleme mit der Powershell wegen der falschen Einstellung der GP und dann war der entscheidende Tip der von Tom vom 25. Januar 2013.
    Das Einstellen der Dateieigenschaft das die Datei von einem anderen Computer stammt und die Ausführung erst „zugelassen“ werden muß.
    Vielleicht kannst du das direkt in deinem Artikel ergänzen, damit man sich nicht soweit in den Kommentaren durch kämpfen muss.

    Danke nochmals.

  • Bent Schrader

    Hallo Hartmut,

    vielen Dank, ich arbeite das gleich ein.

    Gruß,
    Bent

  • Bent Schrader

    Hallo Armin,

    Du musst im Powershell-Skript in Zeile 5 für $useSecureConnection den Wert von $False auf $True stellen, damit SSL verwendet wird.
    Im CMD-Skript natürlich in Zeile 4 den Port eintragen.

    Gruß,
    Bent

  • Lukas

    Bei mir läuft das Skript nicht, es scheitert bereits bei der Ausführung vom PowerShell-Skript.

    Im zentralen Skript habe ich selbstverständlich den Servernamen, Skriptpfad und Port angepasst. Sowohl mit FQDN, IP, als auch NETBIOS-Namen scheint die Verbindung zum Server nicht möglich zu sein, die WSUS Konsole lässt sich bedienen.

    Fehlermeldung:
    Ausnahme beim Aufrufen von „GetUpdateServer“ mit 3 Argument(en): „Die Verbindu
    ng mit dem Remoteserver kann nicht hergestellt werden.“
    Bei C:SKRIPTSWSUSWSUS-Serverbereinigung.ps1:32 Zeichen:78
    + $Wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer
    <<<< ($updateServer,$useSecureConnection,$portNumber)
    + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException

    Sie k”nnen keine Methode fr einen Ausdruck mit dem Wert NULL aufrufen.
    Bei C:SKRIPTSWSUSWSUS-Serverbereinigung.ps1:35 Zeichen:42
    + $CleanupManager = $Wsus.GetCleanupManager <<<< ()
    + CategoryInfo : InvalidOperation: (GetCleanupManager:String) [],
    RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

    Sie k”nnen keine Methode fr einen Ausdruck mit dem Wert NULL aufrufen.
    Bei C:SKRIPTSWSUSWSUS-Serverbereinigung.ps1:37 Zeichen:31
    + $CleanupManager.PerformCleanup <<<< ($CleanupScope)
    + CategoryInfo : InvalidOperation: (PerformCleanup:String) [], Ru
    ntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

    ————————————————————-

    Vielleicht hatte von euch jemand schon das selbe Problem und kann mir die Lösung liefern.

    Danke

    LG

    Lukas

  • Lukas

    Damit sich auch alle auskennen.

    Ich möchte das Skript auf einem SBS 2011 mit installierten WSUS SP und Hotfix installieren.
    Alle notwendigen Installation für SQL wurden bereits getätigt.

    In der PowerShell ist die Execution Policy ebenfalls angepasst.

    LG

Einen Kommentar hinterlassen:

Antispam Bee hat Bent's Blog vor 375.135 Spam-Kommentaren bewahrt.