Bents Blog

 

Ein IT Blog mit Themen aus dem Windows Server Umfeld.

Windows Server Update Services (WSUS) auf Windows Server 2012 mit automatischer Bereinigung

Es ist bereits eine ganze Weile her, dass ich meinen Beitrag für die automatische WSUS-Serverbereinigung mit Tasks und Skripten veröffentlicht habe. Inzwischen haben wir unseren eigenen internen Windows Server Update Service (WSUS) von Windows Server 2003 auf einen Windows Server 2012 migriert. Die dafür nötigen Schritte möchte ich an dieser Stelle dokumentieren und dabei ebenfalls auf die Änderungen bzw. Anpassungen in meinen WSUS-Cleanup Skripten eingehen.

Die Installation unter Windows Server 2012 bietet zwar einige kleine Unterschiede, kann aber so auch unter Windows Server 2008 R2 durchgeführt werden – die Version des WSUS ist nämlich nach wie vor 3.0 Service Pack 2.

Voraussetzungen

Neben dem Betriebssystem und der Wahl, ob der Server physisch oder als virtuelle Maschine betrieben werden soll, benötigt man genügend Speicherplatz für die Bereitstellung der Windows Updates in der eigenen Umgebung. Dieser Speicherplatz hängt von der

  1. Anzahl der verschiedenen Sprachen,
  2. der Anzahl unterschiedlicher eingesetzter Anwendungen und Betriebssystemen (Server und Clients) und
  3. der später definierten Klassifizierungen ab.

Der WSUS benötigt für die Speicherung der eine Microsoft SQL Server Datenbank. Wer bereits einen SQL Server in seiner eigenen Umgebung betreibt, kann während der Installation des WSUS selbigen als Datenbankserver auswählen – oder aber die Windows Interne Datenbank installieren.

Wer die grafische Verwaltungskonsole SQL Management Studio für die interne Datenbank einsetzen möchte, kann bei der Auswahl der zu installierenden Rollen im Server-Manager gleich das Feature .Net Framework 3.5 auswählen und mitinstallieren.

Installation

Die Installation der Windows Server Updates Services (WSUS) geschieht über den Server-Manager als Rolle. Dabei wird automatisch die benötigte Webserver (IIS) Rolle mitinstalliert. Wer keinen SQL Server einsetzt, sollte die WID Database mitinstallieren:


Während der Installation des WSUS fragt dieser nach dem Ort an dem die Windows Updates zukünftig gespeichert werden sollen. Es ist sinnvoll, dafür ein eigenes Volume zu bereitzustellen und die Updates nicht auf dem Systemvolume abzulegen.

Während unter Windows Server 2008 R2 die Dateien der internen Datenbank SUSDB in einem Unterordner neben den Windows Updates liegen (UpdateServiceDBFiles), befinden sich die Datendateien bei Windows Server 2012 unter C:\Windows\WID\Data.

Im Unterschied zu Windows Server 2008 R2 benutzt der WSUS im IIS nicht wie üblich Port 80 sondern bei Windows Server 2012 nun Port 8530 – wie auch beim Small Business Server.

Die Änderung der Ports ist für die Gruppenrichtlinien interessant, über die der WSUS innerhalb der Domäne bekannt gemacht wird. So muss eine bestehende Richtlinie Internen Pfad für den Microsoft Updatedienst angeben unter dem Pfad Computerkonfiguration, Richtlinien, Administrative Vorlagen, Windows-Komponenten, Windows Update wie folgt aktualisiert werden:

Danach kommunizieren die Clients erst korrekt mit dem neuen WSUS, die neuen Ports werden automatisch als eingehende Regeln in der Firewall des Windows Server 2012 hinzugefügt.

Windows Internal Database

Bei Windows Server 2008 R2 befindet sich der Installationsordner unter dem Pfad:

C:\Windows\SYSMSI\SSEE\MSSQL.2005\MSSQL\

Wie unschwer zu erkennen ist, verbirgt sich eine speziell angepasste SQL Server 2005 Express Edition hinter dieser Version. Der Dienst-Anzeigename lautet Windows Internal Database (MICROSOFT##SSEE) und intern MSSQL$MICROSOFT##SSEE. Der Servername für die Anmeldung im SQL Management Studio lautet:

\\.\pipe\MSSQL$MICROSOFT##SSEE\sql\query

Für die grafische Verwaltung empfehle ich das SQL Management Studio 2008 Express. Zusätzlich benötigt man für die Ausführung der WSUS-Cleanup-Skripte das SQL Commandline Utlility SqlCmdLnUtils.msi aus dem Microsoft SQL Server 2008 SP3 Feature Pack.

Bei Windows Server 2012 befindet sich der Installationsordner unter dem Pfad:

C:\Windows\WID\

Hier verbirgt sich hinter der Datenbank ein angepasster SQL Server 2012 (Version 110). Der Dienst-Anzeigename lautet Interne Windows-Datenbank und intern MSSQL$MICROSOFT##WID. Der Servername für die Anmeldung im SQL Management Studio lautet:

np:\\.\pipe\MICROSOFT##WID\tsql\query

Für die grafische Verwaltung benötigt man das SQL Management Studio für SQL Server 2012 Express. Weiterhin benötigt man für die Ausführung der WSUS-Cleanup-Skripte das SQL Commandline Utlility SqlCmdLnUtils.msi aus dem Microsoft SQL Server 2012 SP1 Feature Pack.

Automatische Bereinigung der Datenbank

Wie schon in meinem früheren Beitrag, kommen wieder meine Skripte aus dem Package WSUS-Cleanup.zip zum Einsatz. Der ZIP-Container enthält die folgenden drei Dateien, die in einen beliebigen Ordner auf den Server kopiert werden können – in meinem Beispiel nach D:\WSUS:

D:\WSUS\WSUS-Serverbereinigung.cmd
D:\WSUS\WSUS-Serverbereinigung.ps1
D:\WSUS\WsusDBMaintenance.sql

Wurde das Paket mit Hilfe des Internet-Explorers heruntergeladen, sollte zunächst die Powershell-Datei WSUS-Serverbereinigung.ps1 im Bezug auf die vom Internet Explorer hinterlegte Download-Quelle zugelassen werden. Dafür lässt man sich einmalig die Eigenschaften der Datei anzeigen und bestätigt im Abschnitt Sicherheit mit dem Button Zulassen deren Vertrauenswürdigkeit:

Die Anpassung an die eigene Umgebung erfolgt lediglich im Skript WSUS-Serverbereinigung.cmd. Hier müssen die Zeilen 2 bis 8 entsprechend geändert werden:

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

In Zeile 2 muss der Pfad zu den restlichen Skripten angegeben werden, in meinem Beispiel in (bitte ohne abschließenden Backslash):

set WSUSPATH=D:\WSUS

In Zeile 3 muss der Servername eingetragen – in Zeile 4 die richtige Port-Nummer konfiguriert werden – bei Windows Server 2012 und einem Small Business Server also in (unter Windows Server 2008 R2 bitte Port 80 verwenden):

set PORT-NUMBER=8530

Im Anschluss muss in Zeile 5 und 6 nur noch der richtige Datenbank-Servername – abhängig von der Version – ausgewählt und aktiviert werden. Bis einschließlich Windows Server 2008 R2 muss die Zeile 5 durch Entfernung der Kommentarfunktion REM aktiviert werden –  für eine WID Datenbank unter Windows Server 2012 muss in Zeile 6 der Befehl REM entfernt werden.

Die Einstellung des SQL Kommandozeilen Tools sqlcmd.exe in Zeile 7 ist gleich von mehreren Komponenten abhängig. Das Unterverzeichnis 90 ist bei der Nutzung des SQL Server 2005 Express Edition gültig, kommt der SQL Server 2012 (Express) zum Einsatz muss an dieser Stelle eine 110 eingetragen werden:

set SQLCMD=“%ProgramFiles%\Microsoft SQL Server\110\Tools\Binn\sqlcmd.exe“

Außerdem entscheidet noch die Wahl der Softwareversion über eine Änderung des Pfades für SQLCMD. Bei einer 64 Bit Version bleibt der Pfad bestehen, bei einer 32 Bit Version (x86) muss der Beginn des Pfades %ProgramFiles% mit %ProgramFiles(x86)% ersetzt werden.

Ausführung und Verwendung

Für die Ausführung des PowerShell-Skriptes WSUS-Serverbereinigung.ps1 muss – abhängig von der Konfiguration des Servers – noch die Ausführungsrichtlinie für nicht digital signierte Skripte angepasst werden. Mit dem Powershell-Befehl

Get-ExecutionPolicy -List

erhält man zunächst die Liste der gültigen Einstellungen. Für die Ausführung des Skriptes muss in einer administrativen PowerShell-Konsole der Befehl

Set-ExecutionPolicy RemoteSigned

ausgeführt werden. Dieser bewirkt, dass auch nicht signierte Skripte für die Ausführung erlaubt sind.

Der Start der Bereinigung beginnt mit der Ausführung der Batch-Datei WSUS-Serverbereinigung.cmd. Selbige lässt sich für eine unbeaufsichtigte Ausführung einfach als neuen Task innerhalb der Aufgabenplanung konfigurieren.

Während der Ausführung des Skriptes werden zunächst (durch den Aufruf des Powershell Skriptes WSUS-Serverbereinigung.ps1  in Zeile 18) die WSUS-Dateien bereinigt, im Anschluss wird (in Zeile 24) das SQL Skript WsusDBMaintenance.sql von Microsoft Technet gestartet, welches die WSUS-Datenbank reindiziert und reorganisiert. Die darauf folgenden Aktionen (Zeile 25 bis 27) verkleinern zum Schluss die Datenbank sowie die Datenbankdateien.

Update vom 13. März 2013

Das SQL Skript WsusDBMaintenance.sql habe ich auf Wunsch einiger Leser meines Blogs (siehe ursprünglicher Artikel) angepasst und die folgenden vier Zeilen am Dateiende 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.

Während jeder Ausführung werden sämtliche Ausgaben im Ordner der Skripte in der Datei WSUS-Cleanup.log protokolliert.

Fazit

Wenngleich sich an der Funktionsweise des Windows Software Update Service nichts verändert hat, so unterscheidet sich die Installation unter Windows Server 2012 leicht zum Vorgänger Windows Server 2008 R2. Die Portänderungen und der Einsatz einer neuen internen Windows Datenbank machte kleinere Anpassungen in meinen eigenen Skripten für die automatische Bereinigung der Datenbank notwendig. 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.

25 Kommentare für “Windows Server Update Services (WSUS) auf Windows Server 2012 mit automatischer Bereinigung”

  • Matthias

    Hallo,

    ich bin auf Deine super Seite gestossen, weil ich den WSUS 3.0 SP 2 von WS2003SP2 zu WS2012 migrieren will.
    Dazu verwende ich die Anleitung aus dem MS Technet:
    http://bit.ly/16lnkgJ

    Auch habe ich dank Deines Tipps auf dem WS2012 das SQL Server 2012 Management Studio Express installiert.

    Ich bin leider nicht der SQL Server-Experte und habe ein Problem, mich auf dem WS2012 mit dem Management Studio unter meinem Domänen-Account bei der internen Windows-Datenbank anzumelden.
    Der Domänen-Account ist Mitglied der Gruppe Domänen-Admins.
    Die Gruppe Domänen-Admins ist Mitglied der lokalen Gruppe Administratoren.
    Wenn ich mich mit
    \.pipeMicrosoft##WIDtsqlquery
    verbinden will, kommt der Fehler 18456 (Fehler bei der Anmeldung).

    Mit dem lokalen Administrator vom WS2012 funktionert es aber.
    Ist also nur ein Rechte-Problem. Aber wo?

    Auf dem WS2003SP2 kann ich mich aber mit meinem Domänen-Account anmelden.

    Kannst Du mir bitte sagen, warum die Domänen-Account-Anmeldung auf dem WS2012 fehl schlägt?

    Gruß
    Matthias

  • Matthias

    Hallo,

    ich habe das Anmelde-Problem selbst gelöst.
    Ich habe der lokalen Gruppe „WSUS Administrators“ die Gruppe Domänen-Admins hinzugefügt.
    Jetzt konnte ich mich unter meinem Domänen-Account auf dem WS2012 mit dem Management Studio anmelden.

    Nun habe ich aber das nächste Problem.

    Auf dem WS2012 wird die SUSDB mit dem Script gedropt.
    ———-
    USE master
    GO
    ALTER DATABASE SUSDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE
    GO
    DROP DATABASE SUSDB
    GO
    ———-

    Danach wird die SUSDB-Sicherung mit dem Script wieder hergestellt.
    ———-
    RESTORE DATABASE [SUSDB] FROM DISK = N’C:SUSDB.bak‘ WITH FILE = 1, MOVE N’SUSDB‘ TO N’c:WindowsWIDDatasusdb.mdf‘, MOVE N’SUSDB_log‘ TO N’c:WindowsWIDDataSUSDB_log.ldf‘, NOUNLOAD, STATS = 10
    ———-
    Aber das klappt bei mir nicht.

    Es kommt folgende Fehlermeldung:
    ———-
    Meldung 262, Ebene 14, Status 1, Zeile 1
    Die CREATE DATABASE-Berechtigung wurde in der master-Datenbank verweigert.
    Meldung 3013, Ebene 16, Status 1, Zeile 1
    RESTORE DATABASE wird fehlerbedingt beendet.
    ———-

    Kann mir dazu bitte jemand weiterhelfen.
    Danke.

    Gruß
    Matthias

  • Winfried Sonntag

    Hallo Matthias,

    auf WSUS.DE gibt es ein Forum, da wird dir sicherlich gerne geholfen.

    Servus
    Winfried

  • Hans

    Schön hast du das Synchronisationskript gleich eingebaut, ist sogar besser als meine Lösung mit einem zusätzlichen Aufruf :)

    Habe bei mir mittlerweile noch eine zusätzliche Erweiterung gemacht und zwar wegen den nervigen Itanium Updates. Diese kann man mit folgendem Powershellskript automatisch ablehnen: http://bit.ly/1fEp0lr

    Mit ein wenig Anpassung kann man das ganze auch statt mailen gleich ins Log schreiben lassen.
    Kannst du vielleicht bei Gelegenheit noch ergänzen?

    Gruss Hans

  • Michael

    Hallo und vielen dank für diese tolle Script.
    Leider bekomme ich folgenden fehler nach dem Starten im Log

    Cleanup Report für [sbs2011] (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 C:scriptswsusWSUS-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:scriptswsusWSUS-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:scriptswsusWSUS-Serverbereinigung.ps1:37 Zeichen:31
    + $CleanupManager.PerformCleanup <<<< ($CleanupScope)
    + CategoryInfo : InvalidOperation: (PerformCleanup:String) [], Ru
    ntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

    ————————————————————-
    Ende Dateibereinigung: 24.01.2014 um 11:52:00,53 Uhr

    Server ist ein SBS2011 mit allen aktuellen Patches
    Da ich kein PowerShell experte bin, sagt mir das nicht all zu viel. Jemand eine Idee?

    Viele Grüße
    Michael

  • Uwe

    Hallo,

    zunächst einmal: Super dass jemand so etwas gebaut hat um uns allen das Leben etwas einfacher zu machen!

    Ich habe das Script jetzt bisher nur auf lokalen Express-Instanzen oder der WID verwendet. Ich habe nun ein anderes Szenario und bin mir nun nicht ganz schlüssig wie ich meine Instanz dort eintragen soll.. Unsere SUSDB liegt auf einem SQL Cluster und ist per TCP erreichbar. Wie kann ich denn die Syntax anpassen damit ich so ein Connect bekomme?

    Vielen Dank!

    Uwe

  • Reiser

    Hallo,

    für alle, die das gleiche Problem wie Michael haben (Serverbereinigung.ps1:32 Zeichen:78 … usw.)

    Bitte das Script mit Administrator-Rechten ausführen !! (Rechte Maustaste/Als Administrator ausführen.)
    „Aber ich bin doch als Administrator angemeldet …!??! “
    Ja is prima! Mach es trotzdem. :-) Das hilft!

    Gruß Reiser

  • Peter

    Hallo,

    vielen Dank Bent für dein Skript.

    Leider bekomme ich es nicht zum Laufen. Es scheitert schon an der Verbindung zum SQL-Server. Bei uns liegt die WSUS Datenbank (SUSDB) lokal in einer extra SQL-Server 2012 Express Instanz mit dem Namen „WSUS“ (ServernameWSUS).

    Ich habe deine Vorgabe:

    set DATABASECONNECT=np:\.pipeMICROSOFT##WIDtsqlquery

    wie folgt geändert:

    set DATABASECONNECT=np:ServernameWSUS

    Erhalte damit aber folgende Fehlermeldung:

    Sqlcmd: Fehler: Microsoft SQL Server Native Client 11.0 : SQL Server Network Interfaces: Server doesn´t support requested protocol [xFFFFFFFF].
    Sqlcmd: Fehler: Microsoft SQL Server Native Client 11.0 : Login timeout expired.

    Wie muss denn die Zeile richtig lauten damit die Verbindung hergestellt werden kann?

    Gruß Peter

  • Peter

    Irgendwie frisst die Kommentarfunktion die Backslashes.
    Bei meinem vorherigen Kommentar muss es bei meiner Änderung der Vorgaben so lauten:

    set DATABASECONNECT=np:Servername[Backslash]WSUS

  • Bent Schrader

    Hallo Peter,

    lass bitte das np: weg also nur [Servername][Backslash][Instanz].

    Gruß,
    Bent

  • CJ

    Hallo Bent,

    danke für das tolle Script.
    Bei meinem W2012 war nur die WID (also Windows Internal Database) oben, kein SQLCMD od. Management Tools (no na)
    Dafür kann man die sich die SQLCMD von MS herunterladen, ist zu finden unter SQL 2012 SP2 Feature Pack – und dort dann nur „SqlCmdLnUtils.msi“ und „SQLncli.msi“ herunterladen
    Danach ist SQLCMD unter %ProgramFiles%Microsoft SQL Server110ToolsBinn zu finden.
    Script funktionierte danach klaglos.

    LG

  • Marc K.

    Hallo Bent

    Ich habe den WSUS CleanUp auf meinem neuen Windows 2012 Server installiert.
    Es scheint sauber durch zu laufen. Jedenfalls ist beim ersten Durchgang einiges an Speicher frei geworden. Am Schluss bei der SQL Server Wartung werden aber Fehler gelogt.
    Der Log sieht wie folgt aus (siehe Ende der Nachricht).

    Ich finde auf die Schnelle keine Lösung zu diesem Fehler im Web.
    Hast Du einen Hinweise oder eine Lösung für diesen Fehler?

    Grüsse
    Marc

    Start der Datenbankbereinigung: 16.04.2015 um 14:17:50.95 Uhr
    =============================================================

    Cleanup Report für [SRV-BE-1] (Port: 8530)
    ————————————————————-

    SupersededUpdatesDeclined : 0
    ExpiredUpdatesDeclined : 0
    ObsoleteUpdatesDeleted : 0
    UpdatesCompressed : 7308
    ObsoleteComputersDeleted : 0
    DiskSpaceFreed : 3047804115

    ————————————————————-
    Ende Dateibereinigung: 16.04.2015 um 14:24:04.97 Uhr

    SQL Server Wartung (Connect SRV-BE-1MICROSOFT##WIDtsqlquery)
    ————————————————————-
    HResult 0xFFFFFFFF, Level 16, State 1
    SQL Server Network Interfaces: Error Locating Server/Instance Specified [xFFFFFFFF].
    HResult 0xFFFFFFFF, Level 16, State 1
    SQL Server Network Interfaces: Error Locating Server/Instance Specified [xFFFFFFFF].
    HResult 0xFFFFFFFF, Level 16, State 1
    SQL Server Network Interfaces: Error Locating Server/Instance Specified [xFFFFFFFF].
    HResult 0xFFFFFFFF, Level 16, State 1
    SQL Server Network Interfaces: Error Locating Server/Instance Specified [xFFFFFFFF].
    ————————————————————-
    Ende der Datenbankbereinigung: 16.04.2015 um 14:24:37.58 Uhr
    =============================================================

  • Bent Schrader

    Hallo Marc,

    der Fehler klingt nach einer fehlerhaften Instanz-Bezeichnung. Kannst Du Dich mit dem SQL Manager mit der Instanz verbinden?

    Gruß Bent

  • Marc K.

    Hallo Bent

    Lange nicht mehr daran gedacht. Jetzt wieder die Zeit gefunden.
    Ich muss hier noch sagen, dass ich von Datenbanken und mit deren Umgang nicht wirklich sattelfest bin.
    Inzwischen habe ich SqlCmdLnUtils und SqlNcli installiert. Diese waren noch nicht vorhanden auf meiner Maschine (Server 2012).

    Das Script habe ich für die DB-Connection wie folgt angepasst:
    set DATABASECONNECT=np:\.pipeMSSQL$MICROSOFT##WIDtsqlquery

    Jetzt erhalte ich die folgenden Meldungen:
    Sqlcmd: Fehler: Microsoft SQL Server Native Client 11.0 : Named Pipes Provider: Could not open a connection to SQL Server [2]. .
    Sqlcmd: Fehler: Microsoft SQL Server Native Client 11.0 : Login timeout expired.
    Sqlcmd: Fehler: Microsoft SQL Server Native Client 11.0 : A network-related or instance-specific error has occurred while establis
    hing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is con
    figured to allow remote connections. For more information see SQL Server Books Online..

    Ich hoffe, dass wir der Lösung so etwas näher kommen.

    Grüsse
    Marc

  • Marc K.

    Entwarnung
    —————
    Ich habe noch mal ganz genau hingeschaut und die Zeile für die DB-Connection wie folgt geändert: set DATABASECONNECT=np:\.pipeMICROSOFT##WIDtsqlquery

    Jetzt läuft das Script einwandfrei durch. Es ist eine wahre Freude. WSUS endlich wieder in einen bereinigten Zustand zu haben. Danke für die Hilfe.

    Grüsse
    Marc

  • Chezuz K.

    Hey Bent,

    erstmal großes Lob, super erklärt – alles top!
    Eine Sache wäre für mich als ziemlicher Laie noch interessant; irgendeine Form von Ausgabe/Feedback währrend die Batch läuft.
    Nachdem ich die Skripte angepasst habe wollte ich sie natürlich gleich testen, leider passiert nicht all zu viel, außer dass die log Datei angelegt wird.
    Für mich ist es jetzt schwer zu sagen ob ich einen Fehler gemacht habe oder ob alles so durchläuft wie es soll und einfach eine Weile dauert.
    Einziger Anhaltspunkt ist cmd, welches mir zumindest keinen Fehler ausspuckt, aber auch sonst überhaupt nichts tut.
    Eine einfache Ausgebe alá „Tue dies….fertig. Tue jenes…fertig“
    oder einfach nur „Fehler/kein Fehler“ wäre super.

    Ansonsten Besten Dank und nette Grüße!

  • Bent Schrader

    Hallo Chezuz,

    vielen Dank für das Lob, es freut mich, wenn meine Arbeit erkannt wird.
    Leider kann ich keine Fortschrittsinformationen aus den Skript-Bausteinen liefern, da ja SQL-Statements im Hintergrund auf der Datenbank abgesetzt werden. Deren Abarbeitung dauert in der Tat recht lang, leider wird hier aber keinerleit Status übermittelt.

    Gruß,
    Bent

  • Michael Berger

    Hallo

    Super Beitrag, habe drei WSUS Server damit mal verfrühstückt … stressfrei.
    Zusätzlich habe ich aber noch ein weiteres Skript drinne welches wöchentlich den WSUS auf sinnlose Updates (in unserem Fall Itanium, Sharepoint und Office 64-Bit) prüft und diese per Task automatisch ablehnt.
    Spart Platz wie Sau und ich kriege den Status bzw. das Ergebnis immer schön per Mail.
    Habe mir auch in Dein Skript noch ne Mailbenachrichtigung eingebaut welche mir das Log per Mail sendet. So muss ich nicht nachschauen :-)
    Wer da mehr Infos haben möchte kann sich gerne an mich wenden, würde den Rahmen hier sprengen denke ich mal im Kommentarfeld.

    Gruss,
    Michael

  • Bent Schrader

    Hallo Michael,

    im Rahmen einer neuen Version würde ich gern die Versendung des Log via Mail einbauen. Stellst Du uns dafür Deine Entwicklung zur Verfügung stellen?

    Vielen Dank,
    Bent

  • Hartmut Grimm

    Ja das versenden der Mail wäre für mich auch interresant.
    kämpfe damit aber kriege es nicht hin.

    Ebenfalls das automatsche Ablehnen per Skript wäre sehr hilfreich.

  • Fichte

    Ich bekomme nur timeouts genauso wenn ich die „Cleanup“ Funktion der WSUS Rolle benutze „Datenbankfehler“ „Knoten zurücksetzen“

    Hier ein Auszug aus dem Log:

    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 C:WSUSCLEANWSUS-Serverbereinigung.ps1:37 Zeichen:31
    + $CleanupManager.PerformCleanup <<<< ($CleanupScope)
    + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException

    Kann mir einer weiterhelfen? Danke

  • Peter

    Hallo Bent ein tolles Script !! Auch bei mir ist immer wieder der Timeoutfehler aufgetreten bis ich den Kommentar von Jonas
    28. August 2014 um 10:26 Uhr
    zu lesen unter:

    http://bit.ly/1Nitr5B

    gefunden hatte. Ich habe es dann wie Jonas es beschrieben hat gemacht und in der DB per Hand gelöscht. Dabei sollte man nicht zu schnell aufgeben. Nach ca. 200 gelöschten Einträgen hat dann das Tool im SBS 2008 erstmal selber ca. 1200 Einträge gelöscht. Dann wieder Timeout. Also wieder mit der Hand gelöscht. Danach ist sie Serverbereinigung im SBS durchgelaufen und auch das Script arbeitet jetzt zuverlässig.

    @Fichte das dürfte Dein Problem lösen

    Danke !!!

  • Pit

    Hallo Bent,
    zunächst finde ich es immer wieder super, dass es Experten gibt, die viel Zeit investieren um vielen Leuten bei bestimmten Problemen zu helfen. Ich habe so ein Problem und bin dazu noch ein „Unwissender“, da uns unser leider Admin verlassen hat. Evtl. kannst Du mit bitte helfen.

    Kunz gesagt unser Speicher am Server ist mehr als knapp und nach etwas rumsuchen geht um den Ordner WsusContent. Der hat bei uns 200 GB ! Ich habe dann in Kürze versucht mich mit dem WSUS vertraut zu machen und habe alle „alten“ Updates abgelehnt und die Produkte/Klassifizierungen geprüft. Danach wollte ich die Bereinigung durchführen. Diese bleibt aber bei ca. 25 % stehen (auch nach Stunden).

    Dann bin ich auf Deine Seite gestoßen und würde nun gerne die manuelle Bereinigung durchführen. Leider blicke ich bei dem Skript nicht ganz durch. Wir haben einen SBS 2011 Std. und was ich bisher rausgefunden habe, wurde der WsusContent scheinbar mit der SBS Konsole von C: nach D: verschoben (auf C: hätten die 200GB keinen Platz). Die SUSDB.mdf ist noch auf C:WSUS… und unter D:WSUS ist der WsusContent mit den 200 GB.

    Ich habe das Script vom „Windows Server Update Services (WSUS) auf Windows Server 2012 mit automatischer Bereinigung“ runtergeladen und die Einträge gemacht. Hier geht es aber los.
    set WSUSPATH=D:WSUS
    set WSUS-SERVER=SBSERVER.xx.LOCAL
    set PORT-NUMBER=8035 (steht auch so im WSUS)
    set DATABASECONNECT=np:\.pipeMSSQL$MICROSOFT##SSEEsqlquery

    Dann habe ich gesucht wo die sqlcmd.exe ist. Diese ist im Ordner „100“, da SQL Express 2008 R2 auch installiert ist. Die Zeile 7 habe ich dann angepaßt.
    set SQLCMD=“%ProgramFiles%Microsoft SQL Server100ToolsBinnsqlcmd.exe“

    Bei dem Server ist SQL Express 2005 (wohl standardmäßig) und dann wie gesagt mal der SQL Express 2008 R2 mit dem SQL Server Management Studio installiert worden. Wenn ich mich hier mit \.pipeMSSQL$MICROSOFT##SSEEsqlquery anmelde, sehe ich unter dem Ordner Datenbanken den Ordner SUSDB.

    Get-ExecutionPolicy –List und Set-ExecutionPolicy RemoteSigned habe ich ausgeführt und mit JA bestätigt. Dann habe ich das Script mit „als Administrator ausführen“ gestartet.

    Ein Fester „SQLCMD“ geht auf, aber nichts passiert. Nur ein Cursor blinkt oben links ab und zu. Dann schließt sich das Fenster nach einiger Zeit.

    Im Logfile steht:
    Start der Datenbankbereinigung: 03.02.2016 um 23:00:02,82 Uhr
    ======================================================

    Cleanup Report für [SBSERVER.S2BI.LOCAL] (Port: 8035)
    ————————————————————-
    Ausnahme beim Aufrufen von „GetUpdateServer“ mit 3 Argument(en): „Die Verbindu
    ng mit dem Remoteserver kann nicht hergestellt werden.“
    Bei D:WSUSWSUS-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 D:WSUSWSUS-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 D:WSUSWSUS-Serverbereinigung.ps1:37 Zeichen:31
    + $CleanupManager.PerformCleanup <<<< ($CleanupScope)
    + CategoryInfo : InvalidOperation: (PerformCleanup:String) [], Ru
    ntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

    ————————————————————-
    Ende Dateibereinigung: 03.02.2016 um 23:00:07,35 Uhr

    SQL Server Wartung (Connect np:\.pipeMSSQL$MICROSOFT##SSEEsqlquery)
    ————————————————————-
    Changed database context to 'SUSDB'.
    Estimating fragmentation: Begin. 2016-02-03 23:00:07.430
    Number of indexes to rebuild: 5
    Estimating fragmentation: End. 2016-02-03 23:00:09.130
    2016-02-03 23:00:09.147 Executing: ALTER INDEX [nc3UpdateStatusPerComputer] ON [dbo].[tbUpdateStatusPerComputer] REORGANIZE
    2016-02-03 23:00:09.147 Done.
    2016-02-03 23:00:09.147 Executing: ALTER INDEX [nc2UpdateStatusPerComputer] ON [dbo].[tbUpdateStatusPerComputer] REORGANIZE
    2016-02-03 23:00:09.147 Done.
    2016-02-03 23:00:09.147 Executing: ALTER INDEX [PK__tbFile__0A9D95DB] ON [dbo].[tbFile] REBUILD
    2016-02-03 23:00:11.550 Done.
    2016-02-03 23:00:11.550 Executing: ALTER INDEX [nc2tbXml] ON [dbo].[tbXml] REORGANIZE
    2016-02-03 23:00:12.580 Done.
    2016-02-03 23:00:12.580 Executing: ALTER INDEX [PK__tbRevision__17C286CF] ON [dbo].[tbRevision] REORGANIZE
    2016-02-03 23:00:12.890 Done.
    Estimated number of pages in fragmented indexes: 15243
    Estimated number of pages freed: 149
    Updating all statistics.2016-02-03 23:00:13.123
    Updating [dbo].[tbTargetInTargetGroup]
    [PK__tbTargetInTarget__01142BA1], update is not necessary…
    [nc1TargetInTargetGroup], update is not necessary…
    0 index(es)/statistic(s) have been updated, 2 did not require update.

    dann ewig oft update is not necessary…

    Am Ende:
    Statistics for all tables have been updated.
    Done updating statistics.2016-02-03 23:00:13.233
    Delete sync history.2016-02-03 23:00:13.280
    Cannot shrink log file 2 (SUSDB_log) because all logical log files are in use.
    DbId FileId CurrentSize MinimumSize UsedPages EstimatedPages
    —— ———– ———– ———– ———– ————–
    5 1 559840 152 559808 559808
    5 2 4534336 63 4534336 56

    (2 Zeilen betroffen)
    DBCC execution completed. If DBCC printed error messages, contact your system administrator.
    DbId FileId CurrentSize MinimumSize UsedPages EstimatedPages
    —— ———– ———– ———– ———– ————–
    5 1 559840 152 559808 559808

    (1 Zeilen betroffen)
    DBCC execution completed. If DBCC printed error messages, contact your system administrator.
    Cannot shrink log file 2 (SUSDB_log) because all logical log files are in use.
    DbId FileId CurrentSize MinimumSize UsedPages EstimatedPages
    —— ———– ———– ———– ———– ————–
    5 2 4562672 63 4562672 56

    (1 Zeilen betroffen)
    DBCC execution completed. If DBCC printed error messages, contact your system administrator.
    ————————————————————-
    Ende der Datenbankbereinigung: 03.02.2016 um 23:00:56,35 Uhr

    Hoffentlich war ich nicht zu ausführlich! Die 200 GB sind immer noch da :-(

    Schöne Grüße
    Pit

  • Peter

    Hallo,
    ich konnte das Problem lösen indem ich ca. 3000 Updates in der Datenbank manuell über die ID mit dem SQL-Server-Manager gelöscht habe. Die Bereinigung im WSUS läuft nun durch und der Ordner WsusContent hat jetzt nur noch 84 MB statt 200 GB.

    Das mit dem Skript muss ich noch mal probieren.

    Gruß,
    Pit

  • Marko

    Ist echt ne super Sache danke an den Ersteller wer dies bei mir ab morgen testweise zum Einsatz bringen, und wenn es meine Erwartungen erfüllt einpflegen und automatisieren, nochmals vielen Dank an die die diesen Artikel erstellt und unterstützt haben super Arbeit.

Einen Kommentar hinterlassen:

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