Convert Windows Server Evaluation to Standard/Datacenter Edition

Problem:
You want to convert your windows server evaluation edition to a standard or datacenter edition.

Solution:
Before we can activate the server via KMS or MAC we need to convert the evaluation edition into an standard or datacenter.

Check the current Edition

DISM /online /Get-CurrentEdition

Here you see the server edition. If it is an ServerXXXEval you must convert the server edition into standard or datacenter



Check the possible target editions

To check the possible target edition, you can execute the next command:

DISM /online /Get-TargetEditions



Convert the eval to standard or datacenter edition

ATTENTION: The next step will need an intermediate reboot of the server!!
Now you can convert your evaluation edition to the target edition with the command below:

Standard:
DISM /online /Set-Edition:ServerStandard /ProductKey:XXXXX-XXXXX-XXXXX-XXXXX-XXXXX /AcceptEula

Datacenter
DISM /online /Set-Edition:ServerDatacenter /ProductKey:XXXXX-XXXXX-XXXXX-XXXXX-XXXXX /AcceptEula



For the product key please use the generic volume license keys from the table below. With this keys you can also activate the server via KMS. If you have MAC Keys please use this keys for converting.

Server 2022 Standard VDYBN-27WPP-V4HQT-9VMD4-VMK7H
Server 2022 Datacenter WX4NM-KYWYW-QJJR4-XV3QB-6VM33
Server 2019 Standard N69G4-B89J2-4G8F4-WWYCC-J464C
Server 2019 Datacenter WMDGN-G9PQG-XVVXX-R3X43-63DFG
Server 2016 Standard WC2BQ-8NRM3-FDDYY-2BFGV-KHKQY
Server 2016 Datacenter CB7KF-BWN84-R7R2Y-793K2-8XDDG

spring4shell : vulnerability scanner

Nach log4j kommt spring4shell , langsam nervt das ;(

Ein Kollege hat hier einen vulnerability scanner geschrieben um verdächtige Klassen auf einem System zu finden. z.G. ist das Tool in GO geschrieben und kann für jede Plattform kompiliert werden. Nachdem ich das jetzt bereits ausgiebig im Einsatz habe, kann ich sagen, das macht das Leben leichter.
https://github.com/hillu/local-spring-vuln-scanner

Windows : pslogrotate.ps1 um Logfiles zu rotieren

Wir haben hier einige Anwendungen unter Windows im Einsatz die unsere Platten zuschreiben mit Logfiles. Aus meinen Linux Systemen kenne ich logrotate und pslogrotate ist eine light Version von diesem.

pslogrotate baut auf powershell 5 auf und ist mit einem json einfach zu configurieren. Definieren kann mal die Vorhaltezeit der Logs in Tagen und ob die Logs komprimiert werden sollen. Auch der Dienst kann auf restart gesetzt werden. Das bedeutet mein Script beendet den Dienst roliert das Logfile und startet den Dienst wieder.

Gerne bin ich für Feature Requests offen , diese dann bitte in Github direkt stellen.

Hier gehts zu pslogrotate.ps1 : https://github.com/Mokkujin/powershell/tree/main/pslogrotate

Windows: Server hängt mit "System wird vorbereitet. Schalten Sie den Computer nicht aus"

Problem:
Nach der Installation von mehreren Microsoft Patches auf einem Server musste ich diesen neu starten. Diese blieb jedoch bei der Meldung hängen und ich habe fast 20 Minuten gewartet, ohne das sich etwas tut:

Ich wollte den Server nicht einfach "hart" ausschalten...

Lösung:
Von einem anderen Server aus konnte ich mir die Dienste anzeigen lassen. Hier war der Dienst "Windows Modules Installer" im Status "wird beendet" und wurde aber nie beendet. Also müssen wir diesen remote beenden. Dazu habe ich das Windows-eigene Tool "Taskkill" genommen und den Installer-Dienst remote mit folgendem Befehl beendet:
taskkill /S hostname /IM trustedinstaller.exe
Nach wenigen Sekunden war der Dienst beendet und der Neustart wurde problemlos durchgeführt.
Man kann das auch mit PSEXEC von dne Sysinternals Tools machen.

Windows Server: Fehlermeldung ERROR_INVALID_PRINTER_NAME, wenn man einen Windows-Druckserver über einen DNS Alias (CNAME) anspricht

Problem:
Damit ich nicht immer die Drucker mit einem anderen Servernamen verbinden muss, habe ich mir gedacht, dass ich einen DNS-Alias (CNAME) für meinen Microsoft Windows Druckserver erstelle und den eigentlichen Druckserver dahinter "verstecke". Leider habe ich dann ständig Fehlermeldungen erhalten, wenn ich die Drucker verbinden wollte: ERROR_INVALID_PRINTER_NAME

Lösung:
Es gibt tatsächlich eine Lösung dafür. Man muss folgenden Registry-Key auf dem Druckserver erstellen und nach einem Neustart lässt dich der Druckserver über den DNS-Alias (CNAME) problemlos ansprechen.
Folgenden Key bitte setzen:

[HKLM\SYSTEM\CurrentControlSet\Control\Print]
"DnsOnWire"=dword:00000001


Danach bitte den Spooler-Dienst auf dem Server neu starten, damit die Einstellung wirksam wird.

Quelle:
Microsoft DOCS: Error message when you try to connect to a printer by using an alias (CNAME) resource record: Windows couldn't connect to the printer

.NET Anwendung baut keine Verbindung zum Webserver auf - TLS Konfiguration anpassen

Problem:
Ich hatte das Problem, dass unsere .NET Anwendung für das Artikel-Update des Webshops plötzlich nicht mehr funktioniert hat - keine Verbindung zum Server mehr. Nach etwas Recherche hat sich gezeigt, dass es daran lag, dass die Webseite nur noch TLS 1.2 und 1.3 spricht aber unsere Anwendung mit TLS 1.0 die Verbindung herstellen und die Daten hochladen wollte.

Lösung:
Nach etwas Suche habe ich habe TLS 1.1 und TLS 1.2 am Windows-Client per Default aktiviert (TLS 1.3 ist noch nicht Standard). Das funktioniert über Registry-Keys am einfachsten (optional GPO bauen):

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Protocols\TLS 1.1\Client]
„DisabledByDefault“ = dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel\Protocols\TLS 1.2\Client]
„DisabledByDefault“ = dword:00000000


Sollten die Schlüssel „TLS 1.1“ und „TLS 1.2“ und „Client“ noch nicht existieren, dann bitte anlegen.

Damit aber noch nicht genug, da .NET Framework sich NICHT an den Systemstandard hält, sondern seine eigene TLS-Konfiguration macht.
Man kann das aber ändern, indem man ein paar Registry-Tweaks setzt, damit .NET das Systemdefault-TLS-Protokoll verwendet. Wichtig hier ist zuprüfen, ob die .NET Anwendung 32- oder 64-Bit ist und entsprechend die Keys setzen.

Hier für x64 bzw. Eine 64-Bit .NET-Anwendung

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727]
"SystemDefaultTlsVersions" = dword:00000001
"SchUseStrongCrypto" = dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SystemDefaultTlsVersions" = dword:00000001
"SchUseStrongCrypto" = dword:00000001


Und für x86 bzw. eine 32-Bit .NET-Anwendung

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v2.0.50727]
"SystemDefaultTlsVersions" = dword:00000001
"SchUseStrongCrypto" = dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319]
"SystemDefaultTlsVersions" = dword:00000001
"SchUseStrongCrypto" = dword:00000001


Windows-Client neu starten und damit sollte die Verbindung wieder laufen und die Verbindung zur Webapplikation wieder funktionieren.

Quellen:
Microsoft: So aktivieren Sie TLS 1.1 oder TLS 1.2 als Standard sichere Protokolle WinHTTP in Windows Update
Aktualisieren und Konfigurieren von .NET Framework zur Unterstützung von TLS 1.2.

“Das einzig sichere System müsste ausgeschaltet, in einem versiegelten und von Stahlbeton ummantelten Raum und von bewaffneten Schutztruppen umstellt sein.”
Gene Spafford (Sicherheitsexperte)