WSUS-Server-Cleanup / Kochrezept

So ein WSUS-Server verbrät im Laufe der Zeit schon einiges an Plattenplatz. Ärgerlich ist zudem, dass ein Teil davon eventuell bereits abgelehnte oder bereits ersetzte Updates sind. Um einen WSUS-Server ausgehend von den in der Datenbank freigegebenen Updates zu bereinigen, bietet sich folgende Reihenfolge an.
Als Voraussetzung ist das bekannte WSUS-Cleanup-Script (https://www.ajtek.ca/) notwendig. Es ist noch bis ca. Mitte 2019 kostenfrei und danach kostenpflichtig. Der Betrag ist aber überschaubar.

  • Überprüfen der Produkte und Klassifizierungen im WSUS und damit ggfs. ausnehmen nicht mehr benötigter Updates.
  • Stop des WSUS-Dienstes und prüfen, dass der BITS-Dienst (intelligenter Hintergrundübertragungsdienst) nicht gestartet ist
  • Löschen des WSUSContent-Verzeichnisinhalts
  • Starten des WSUS-Dienstes
  • Damit auch keine nicht mehr benötigten Updates mehr heruntergeladen werden – Clean-WSUS laufen lassen:
.\Clean-WSUS.ps1 -RemoveObsoleteUpdates -DeclineMultipleTypesOfUpdates -SaveReport TXT
  • Anschließend entfernen der abgelehnten Updates, aufräumen der Datenbank:
.\Clean-WSUS.ps1 -RemoveDeclinedWSUSUpdates -WSUSDBMaintenance -WSUSServerCleanupWizard -SaveReport TXT
  • BITS-Transfer für die große Datenmenge auf Vordergrund-Prio stellen mit folgendem PS-Dreizeiler:

    $conf=(get-wsusserver).GetConfiguration()
    $conf.BitsDownloadPriorityForeground=$true
    $conf.save()
  • Initiieren des Downloads aller nicht im WSUSContent-Verzeichnis befindlichen Updates anhand der Datenbank mit dem Wsus-Cmdline-Tool:
%Program Files%\Update Services\Tools\WsusUtil.exe -Reset

Exchange – organisationsweit Weiterleitungen herausfinden

Es gibt einige Stellen, an denen Weiterleitungen eingerichtet sein können.
Patrick Grünauer hat das hier mal sehr gut zusammengefasst und mit 3 CmdLets lassen sie sich übersichtlich anzeigen.

ERGÄNZUNG: Grund dafür, dass ich versucht habe, herauszufinden, wo welche Weiterleitungen konfiguriert sind, war der Umstand, dass ein User meldete, dass Mails an einen abwesenden Kollegen immer automatisch an ein Funktionspostfach weitergeleitet werden. Ich konnte aber nirgends eine entsprechende Weiterleitung finden.
ABER: Es war ein OOF konfiguriert (nur intern). Reproduzierbar getestet ist es wirklich so, dass wenn der OOF (zumindest via Powershell-CmdLet von Serverseite aus) aktiviert ist, Mails weitergeleitet werden, wenn deaktiviert, dann nicht. Strange. Das Postfach ist schon uralt und wurde schon von Exchange 5.5 immer migriert. Mittlerweile ist es eine Exchange 2010-Umgebung.

Windows 10-Version via Powershell ermitteln

Folgende Zeile gibt die installierte Windows-Version aus. Also z.B. 1703 oder 1709, usw.
Zum Beispiel zur Verarbeitung in Scripten, mit denen man neu hinzugekommene Apps wieder runterwerfen kann…

(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\" -Name ReleaseID).ReleaseId

Firefox-Einstellungen im Unternehmen verteilen

Schon vor einiger Zeit wurde ich damit mal konfrontiert und hatte keine so richtig saubere Lösung parat. Geschweige denn eine genaue Ahnung von der Reihenfolge und über welche Settings-Dateien die zahlreichen Einstellungen des Firefox beim Start importiert und gelesen werden. Geschweige denn wie Einstellungen so mitgegeben werden können, dass sie für den Benutzer unveränderbar sind.

Zuletzt war ich auf der Suche nach der elegantesten Möglichkeit, das Stammzertifikat einer internen Zertifizierungsstelle auf die Firefox-Installationen im Unternehmen zu verteilen. Bei meinen Recherchen wurde ich hier auf ein recht neues Feature aufmerksam (ab FF 49), das – einmal aktiviert – den Windows-Zertifikatsspeicher fragt, wenn eine SSL-verschlüsselte Seite  „Firefox-Einstellungen im Unternehmen verteilen“ weiterlesen

Windows Remote-Verwaltung via Powershell

Zwar schon ein paar Jahre alt, aber besonders die 1:n-Verwaltung ist immer noch sehr praktisch.

Auch die Desired State Configuration, die mit Powershell 4.0 gekommen ist, ist nützlich zur einheitlichen und identischen Vorbereitung von Servern, z.B. für identische Verzeichnisse, Rollen, Features, usw.

Exchange 2010 – aktuelle Anmeldungen herausfinden

Manoman…nicht alles wird einfacher mit neueren Versionen. Möchte man gern sehen, welche Benutzer sich innerhalb der letzten Stunde am Exchange-Server angemeldet haben, hilft folgendes, übersichtliches CmdLet:

Get-Mailbox -Resultsize Unlimited | Get-MailboxStatistics | where-object {$_.LastLogonTime -gt (get-date).AddHours(-1)} | select Displayname, LastLogonTime | Sort LastLogonTime

Oder folgendes:

Get-LogonStatistics -Server „SERVERNAME“ | Sort-Object -property UserName -unique | where-object {$_.LastAccessTime -gt (get-date).AddMinutes(-30)}

Aber Achtung – OWA-Zugriffe werden hier nicht angezeigt.

Windows-Versionen für Scripting

Die wohl vollständigste Liste der in Verwendung befindlichen Windows-Versionen, soeben wieder mal um ein Betriebssystem erweitert. 😉

for /f „tokens=1,2,3,4* delims= “ %%i in (‚ver‘) do set version=%%i %%j %%k %%l

if „%version%“ == „Microsoft Windows XP [Version“ (goto XP;)
if „%version%“ == „Microsoft Windows 2000 [Version“ (goto 2000;)
if „%version%“ == „Microsoft Windows [Version 5.2.3790]“ (goto 2003;)
if „%version%“ == „Microsoft Windows [Version 6.0.6000]“ (goto Vista;)
if „%version%“ == „Microsoft Windows [Version 6.0.6001]“ (goto Vista;)
if „%version%“ == „Microsoft Windows [Version 6.0.6002]“ (goto Vista;)
if „%version%“ == „Microsoft Windows [Version 6.1.7600]“ (goto Windows7;)
if „%version%“ == „Microsoft Windows [Version 6.1.7601]“ (goto Win7SP12008R2;)
if „%version%“ == „Microsoft Windows [Version 6.2.9200]“ (goto Windows8;)

Automatische WSUS Serverbereinigung mit Tasks und Skripten

Damit der WSUS-Bereinigungstask entfallen kann:

Automatische WSUS Serverbereinigung mit Tasks und Skripten » Bents Blog » Von Bent Schrader.

Es ist neben den o.g. Scripten der native SQL-Client und die sqlcmd.exe aus dem SQL-Featurepack erforderlich.

UPDATE: Mittlerweile gibt es eine aktuellere, bessere Variante, wie hier beschrieben.

Sleep ohne sleep.exe

@echo off

echo wscript.sleep 1000*15 >%temp%\sleep.vbs
cscript /nologo %temp%\sleep.vbs
erase %temp%\sleep.vbs

net use …