Montag, 30. Oktober 2023

Windows Server 2022 auf Consumer Hardware installieren

Das Problem: Die Hardware Hersteller liefern Treiber und Setup Dateien nur für Desktop Windows Versionen und nicht für Server. Je nach Hersteller gibt es Treiber Setups zum Download die auf dem Server nicht laufen (man möchte die da auch nicht haben) oder es gibt Rundumsorglos Tools ("Armoury Crate" von Asus oder "msi driver utility installer") die alles mögliche installieren wenn man nicht aufpasst, nur die Treiber sind eine Nebensache. 

Jetzt hat man die Möglichkeit bei den üblichen Herstellern Intel, Amd, Realtek usw. nach Treibern zu suchen, meist eine Odyssee. Ich wollte einen kleinen Windows Server möglichst schlank aufbauen und installieren. Beim ITX Board geht es schon los: alles irgendwie "Gamer" Hardware mit jeder Menge Komponenten die ein Server nicht braucht.

Vorbereitung

Im aktualisierten Bios deaktiviert man erstmal alles, was der Server nicht braucht: 

  • Wifi und Bluetooth, 
  • HD Audio. 

Kein Gerät vorhanden - kein Treiber notwendig!

Ich empfehle temporär Windows 10 zu installieren, oder ein mobiles System vom Stick zu starten.

Damit wir wirklich bei null beginnen, werden alle OEM Treiber gelöscht, optional könnte man die Geräte noch im Device-Manager deinstallieren. Meine Befehlszeilen kommen alle in eine Powershell (Administrator) Konsole. Pnputil löscht und deinstalliert mit dem Befehl wirklich alle OEM Treiber.

Get-WindowsDriver -Online -All |where {$_.driver -like "oem*"}| foreach {pnputil.exe /delete-driver $_.driver /uninstall /force}

Treiber installieren

Mit der Treiberinstallation des Board Herstellers können jetzt alle Treiber installiert werden. Als Ergebnis sollte der Geräte-Manager keine Geräte mehr ohne Treiber anzeigen. Ich musste allerdings zusätzlich noch die aktuelle Chipset Software von Intel holen und starten.

Hat man als Grundlage ein vorinstalliertes Windows, muss man besonders bereinigen. Hier gibt es meist jede Menge "Leichen" von der Image Erzeugung.

Zunächst holen und starten wir ein Powershell Script, welches hidden Devices löscht - also Hardware die aktuell gar nicht vorhanden ist. Danach löschen wir alle OEM Treiber die nicht verwendet werden, pnputil erzeugt hier nur eine Fehlermeldung und löscht die Treiber nicht, die verwendet werden.

wget -O removeGhosts.ps1 https://raw.githubusercontent.com/istvans/scripts/master/removeGhosts.ps1
.\removeGhosts.ps1 -force
Get-WindowsDriver -Online -All |where {$_.driver -like "oem*"}| foreach {pnputil.exe /delete-driver $_.driver }

Export der Treiber

Aus dem komplett installiertem Windows, kann man jetzt die OEM Treiber exportieren:

mkdir c:\treiber
dism /online /export-driver /destination:c:\treiber

Zwischentest

Man kann alles noch kurz testen, einfach wie ganz oben alle Treiber löschen und mit folgendem Befehl wieder importieren.

pnputil.exe /add-driver c:\treiber\*.inf /subdirs /install

Funktioniert alles, kopiert man die Treiber von der Testinstallation an einen erreichbaren Ort. Beispiel Netzlaufwerk.

New-SmbMapping -RemotePath '\\nas' -UserName 'user' -Password 'Kennwort'
copy c:\treiber \\nas\sicherung\board\ -Recurse

Windows Server installieren

Mit wenigen Schritten hat man eine vollständige Installation. Nach dem Setup von DVD oder USB Stick öffnet man wieder nur die Powershell Konsole.

  1. Zeitzone setzen, egal was man in der Setup Maske einstellt, die Zeitzone wird falsch/nicht gesetzt und steht auf "Microsoftland". 
  2. Windows Server kann sich nicht auf meine Linux basierte NAS verbinden, der Registrykey hilft sofort.
  3. Die Verbindung zum Netzwerk vorbereiten.
  4. Alle Treiber in dem Pfad installieren.
Wenn man bequem per RDP arbeiten will, kann man dies als erstes aktivieren.

Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server' -name "fDenyTSConnections" -value 0
Enable-NetFirewallRule -DisplayGroup "Remote Desktop"


Set-TimeZone -Name 'W. Europe Standard Time' -PassThru
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" AllowInsecureGuestAuth -Type DWORD -Value 1 -Force
New-SmbMapping -RemotePath '\\nas' -UserName 'user' -Password 'Kennwort'
pnputil.exe /add-driver \\nas\sicherung\board\*.inf /subdirs /install

Es kann sein, dass der Treiber zwar ordentlich installiert, das zugehörige Gerät aber nicht erkannt wird. Irgendein Mechanismus blockiert den PNP Vorgang auf dem Server für meinen Intel(R) Ethernet Controller I226-V. 

In dem Fall kann man per Hand einen alternativen Adapter I226-LM aktivieren. Die Informationen in der Inf Datei für beide Adapter sind völlig identisch, ich hoffe damit auf einwandfrei Funktion. 

Update Driver / Browse my Computer ... / Let me pick ... / Intel / Intel(R) Ethernet Controller I226-LM

Damit Windows diese Installation nicht einfach ändert, kann man verhindern das die Geräteistellungen geändert werden (interaktiv: Change Device Installation Settings).

Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Device Metadata' -Name 'PreventDeviceMetadataFromNetwork' -Value 1 -ea SilentlyContinue

Und man kann die Treiber vom Windows Update ausschließen:

Set-ItemProperty -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate' -Name 'ExcludeWUDriversInQualityUpdate' -Value 1 -ea SilentlyContinue

ToDo?

Code Block

Text

Keine Kommentare:

Kommentar veröffentlichen