Sicherheitshinweis
Die hier bereitgestellten Skripte sind stets auf eigene Gefahr anzuwenden!
Daher immer erst mit einem nicht-kritischen System oder in einer Testumgebung ausführlich testen!
Einleitung
Aus aktuellem Anlass in einer Kundenumgebung habe ich bis zu 2900 Synchronisierungen in der WSUS-Konsole registriert und die WSUS-Konsole hat sich gut und gerne bei der Darstellung der Synchronisationseinträge verabschiedet. Deshalb musste eine Lösung her, die nicht radikal aber dennoch für alle Beteiligten administrativ interessant ist.
Lösungsansätze
Die Lösung muss so aussehen,…
- dass im ersten Schritt eine Möglichkeit gefunden wird, die regelmäßig die WSUS-Synchronisationen in der WSUS-Konsole entfernt.
- dass im zweiten Schritt eine Möglichkeit gefunden wird, dass flexibel ein Wert angegeben werden kann, damit z.B. nur der aktuelle Monat der WSUS-Synchonisationen als Synchronisationseinträge in der WSUS-Konsole erhalten bleiben.
Voraussetzungen
In diesem Beitrag erläutere ich, wie diese Tätigkeiten mittels der Kommandozeile entsprechend durchgeführt werden können. Jedoch sind hierzu gewisse Voraussetzungen zu treffen, damit auf die SUSDB aus der Kommandozeile erfolgreich zugegriffen werden kann. Daher sind die folgenden Installationen zwingende Voraussetzungen…
Möglichkeit 1:
- Microsoft SQL Server Management Studio (SSMS) (Download)
– Ersetzt Möglichkeit 2! –
Möglichkeit 2:
- Microsoft Visual C++ 201x Redistributable (Download)
- Microsoft ODBC Driver 17 for SQL Server (Download)
- Microsoft Befehlenszeilenprogramm 15 für SQL Server (Download)
– Ersetzt Möglichkeit 1! –
Vorbereitungen
Aus der Kommandozeilenebene heraus, wird eine *.sql- Datei aufgerufen und ausgeführt. Deswegen muss zuvor noch eine entsprechende *.sql- Datei erstellt werden. Die Bennenung der SQL-Datei ist grundsätzlich egal!
SQL-Skript:
-- ############################################################################ -- Clear WSUS Synchronization history -- ############################################################################ -- SET NOCOUNT to ON to no longer display the count message. SET NOCOUNT ON; GO --- QUOTED_IDENTIFIER to ON values inside double-quotes as an identifier. SET QUOTED_IDENTIFIER ON; GO --- Select a database where all the operations would be performed. USE SUSDB; GO -- Clear WSUS Synchronization history. DELETE FROM tbEventInstance WHERE EventNamespaceID = '2' AND EVENTID IN ('381', '382', '384', '386', '387', '389') AND DATEDIFF(month, TimeAtServer, CURRENT_TIMESTAMP) >= 1; GO --- Clear synchronization history from a spesific date -- DELETE FROM tbEventInstance WHERE EventNamespaceID = '2' AND EVENTID IN ('381', '382', '384', '386', '387', '389'); -- DELETE FROM tbEventInstance WHERE EventNamespaceID = '2' AND EVENTID IN ('381', '382', '384', '386', '387', '389') AND TimeAtServer < '2021-01-01'; -- DELETE FROM tbEventInstance WHERE EventNamespaceID = '2' AND EVENTID IN ('381', '382', '384', '386', '387', '389') AND DATEDIFF(month, TimeAtServer, CURRENT_TIMESTAMP) >= 12; -- DELETE FROM tbEventInstance WHERE EventNamespaceID = '2' AND EVENTID IN ('381', '382', '384', '386', '387', '389') AND DATEDIFF(day, TimeAtServer, CURRENT_TIMESTAMP) >= 360); -- DELETE FROM tbEventInstance WHERE EventNamespaceID = '2' AND EVENTID IN ('381', '382', '384', '386', '387', '389') AND TimeAtServer > NOW(); -- ############################################################################
Für den späteren Aufruf in der Kommandozeile, die *.sql- Datei entsprechend lokal auf dem System abspeichern. Für die Automatisierung bietet sich auf der Kommandozeile ebenfalls eine entsprechende *.cmd- Datei an.
CMD-Skript-Beispiel:
REM ============================================================================ @ECHO OFF SETLOCAL ENABLEDELAYEDEXPANSION SET CMDNAME=%~NX0 (%~Z0 Bytes) TITLE %CMDNAME% MODE CON:COLS=81 LINES=12 COLOR 1F REM - Run SQL Script to prepare the database environment REM [-S Server] REM [-E vertrauenswürdige Verbindung] REM [-i Eingabedatei] REM [-o Ausgabedatei] REM [-W nachfolgende Leerzeichen entfernen] ECHO Preparing Databases... Sqlcmd -S "np:\\.\pipe\MICROSOFT##WID\tsql\query" -E -i "C:\Scripts\WSUS\sync.sql" -o "C:\Scripts\WSUS\_LOG\sync.log" -W ENDLOCAL EXIT /B %ERRORLEVEL% REM ============================================================================
(Ist die WSUS-DB umbenannt bzw. besitzt einen anderen DB-Namen, muss der entsprechende Aufruf abgeändert werden: \.\pipe\MICROSOFT##WID\tsql\query)
Für den späteren Aufruf in der Aufgabenplanung, die *.cmd- Datei entsprechend lokal auf dem System abspeichern. Zusätzlich muss das LOG-Verzeichnis zuvor erstellt sein. Die Speicherpfade an die eigenen Bedürfnisse anpassen!
-E -i "C:\Scripts\WSUS\sync.sql" -o "C:\Scripts\WSUS\_LOG\sync.log" -W
Synchronisationen entfernen
Sind die Vorbereitungen abgearbeitet, ist die Durchführung der ausstehenden Aktionen schnell getan.
Variante 1:
- Die *.cmd- Datei manuell mit administrativer Berechtigungen starten und ausführen.
Variante 2:
In der Aufgabenplanung eine neue Aufgabe erstellen und hierbei auf die folgenden Optionen achten…
- Allgemein (Reiter) –> Sicherheitsoptionen –>
Unnabhängig von der Benutzeranmeldung ausführen
- Allgemein (Reiter) –> Sicherheitsoptionen –>
Mit höchsten Privilegien ausführen
- Allgemein (Reiter) –> Konfigurieren für:
Windows Server 20xx
- Aktionen (Reiter) –> Neu –> Aktion: –>
Programm starten
- Aktionen (Reiter) –> Neu –> Einstellungen –> Programm/Skript –>
C:\Scripts\WSUS\sync.cmd
Prüfung der WSUS-Synchronisationen
Die Kontrolle der WSUS-Synchronisationen, sind aus der erstellten LOG-Datei zu entnehmen.
Beispiel:
C:\Scripts\WSUS\_LOG\sync.log
Alternativ in der WSUS-Konsole unter Synchronisationen das Ergebnis sich anzeigen lassen!
Es sollten wie in diesem Beispiel, nur noch die Synchronisationen des aktuellem Monats angezeigt werden.