Firewall Regeln in unbeaufsichtigter Windows Installation aktivieren

Aus dem Leben: Aufgabe war, eine automatisierte Installation eines Windows 2016 Servers zu generieren, bei der sofort RDP aktiv ist. Sieht einfach aus, ist auch überall dokumentiert, z.B. hier.

Funktioniert auch soweit, bis auf das Aktivieren der nötigen Firewall Regeln. Meine erste Idee war, das es ein Problem mit der deutschen Serverversion ist, weil die Regelgruppe, die aktiviert werden soll, im Deutschen „Remotedesktop“ heißt (statt „Remote Desktop“ im Englischen). War es aber nicht. Nach insgesamt 9! Versuchen habe ich dann das hier gefunden:

<FirewallGroups>
      <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop">
      <Active>true</Active>
      <Group>@FirewallAPI.dll,-28752</Group>
      <Profile>all</Profile>
   </FirewallGroup>
</FirewallGroups>

Zu beachten die Zeile „@FirewallAPI.dll,-28752“. Ich war also schon auf der richtigen Spur. Aber das die Abfrage beim Setup nicht auf den übersetzten Namen, sondern auf den Link in die DLL zur Ressource prüft, darauf bin ich dann doch nicht gekommen.
Die komplette Sektion in der unattended.txt für das Aktivieren von RDP sieht für den Windows Server 2016 wie folgt aus:

<settings pass="specialize">
    <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"
        xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <fDenyTSConnections>false</fDenyTSConnections>
    </component>
    <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"
        xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <UserAuthentication>0</UserAuthentication>
    </component>
    <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"
        xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <FirewallGroups>
                    <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop">
                    <Active>true</Active>
                    <Group>@FirewallAPI.dll,-28752</Group>
                    <Profile>all</Profile>
                </FirewallGroup>
        </FirewallGroups>
    </component>
</settings>
Mehr

PRTG per Powershell bedienen

PRTG (https://www.de.paessler.com/prtg), mein Lieblingstool zur Netzwerküberwachung, hatte für mich bisher immer den Nachteil, das man es nicht so richtig auf der Kommandozeile bedienen konnte. Immer mal wieder kam die Aufgabe eine bestimmten Sensor zu allen bestehenden Server- Objekten hinzuzufügen. Kann man von Hand machen. Ist aber bei vielen Servern echt lästig.

Kurze Suche fördert das Projekt PrtgApi bei GitHub zu Tage. Gut gepflegt und aktuell lässt es praktisch keine Wünsche offen und mir das Herz höher schlagen.
Nachdem ich mir die richtigen Dateien zu einem Powershell- Modul zusammen kopiert und installiert hatte war das hinzufügen eines Sensors zu allen Servern eine Sache von ein paar Minuten:

import-module prtgapi 
connect-prtgserver servername

# Quelle
$quellSensor = get-device quellServer | get-sensor Quelle

# Und auf ein anderes Device klonen
get-device zielServer | clone-object -SourceID $quellSensor.id

# jetzt noch starten:
get-device zielServer | get-sensor Quelle | Resume-Object

Das geht natürlich auch mit einem Array an Zielservern…. sehr cool.
Die API kann noch viel mehr und es lohnt sich da mal etwas tiefer zu graben.

Mehr