Manage-ADSites und Service
Alle gehen in die Cloud aber dennoch gibt es auch weiter lokale Active Directory-Dienste, die entweder komplett neu aufgebaut oder im Rahmen einer Migration umstrukturiert werden. Und wer größere AD-Umgebungen mit vielen Standorten kennt, weiß um die Bedeutung eine korrekten Konfiguration hinsichtlich "AD Sites&Services". Die Domain Controller benötigen diese Information zum Aufbau einer effektiven AD-Replikation und DFSR-Replikation. Aber auch die lokalen Domainmitglieder nutzen diese Information, um den "nächsten" Domain Controller zu ermitteln und sich dort nicht nur anzumelden, sondern auch die Gruppenrichtlinien zu beziehen.
Aufgabenstellung
Wir brauchen daher ein Liste der IP-Subnetze und der Zuordnung an Standorte. Das ist primäre eine Aufgabe des Netzwerk-Teams, die hoffentlich eine entsprechende Liste haben. Wenn die Windows Administratoren natürlich auch für die Vergabe von IP-Adressen per DHCP zuständig sind, dann haben Sie viele aber sicher nicht alle Daten. Eine Firma mit mehreren Standorten sollte auf jeden Fall eine entsprechende Liste führen.
In vielen Firmen ist dies tatsächlich immer noch eine Excel-Liste oder manchmal sogar eine Access-Datenbank. Es soll aber auch Firmen mit einem aktiven IPAM-System (IP Address Management) geben. Letztlich ist es mir gleich, woher und wie die Daten kommen, Solange ich sie verarbeiten kann. Idealerweise als CSV-Datei mit dem passenden Subnetz, der Subnetzmaske und dem Namen des Standorts. Oft passt aber der Standortname nicht und generell ist so eine Liste natürlich nicht statisch. Entweder sagt der Netzwerk-Administrator dem Windows Administrator bescheid, wenn er etwas addiert, umstellt oder entfernt oder er stellt die Informationen z.B. als Webseite, REST-API o.ä. bereit.
Dann bleibt aber immer noch eine Frage im Raum stehen:
Wie kann ich per PowerShell eine CSV-Datei mit Subnetzen und Standorten in die Active Directory Sites and Subnets importieren
Natürlich kenne ich die PowerShell-Befehle zum Verwalten von Active Directory Standorten und Diensten aber ich war neugierig, wie sich Copilot schlägt.
Erster Entwurf
Also habe ich meine erste Frage gestellt (Auch mit den Tippfehlern und DE/EN-Gemisch)
Wie kann ich per PowerShell eine CSV-Datei mit Subnetzen und Standorten in die Active Directory sites and subnets importieren?
Die Antwort kam prompt samt Vorschlag zu einer CSV-Datei und etwas PowerShell:
Das sieht schon einmal gut aus aber der erfahrene Administrator sieht gleich mehrere Einschränkungen:
- Wo werden die Sites angelegt?
Das passiert nicht und insofern kann New-ADReplicationSubnet - Konflikte mit vorhandenem Subnet
Auch fängt der Code nicht ab, wenn es schon das Subnetz gibt und aktualisiert es nicht - Kein Cleanup
Zudem werden nicht mehr vorhandene Subnetze auch nicht entfernt
Aber das passiert, wenn man beim ersten Prompt nicht gleich alle Informationen liefert
Entwurf 2
Ich habe daher folgende Verfeinerung eingegeben, damit Copilot den Code erweitert.
Bitte erweitere das Skript um die Anlage der Standort und löschen nicht mehr vorhandenen Standorten und subnetzen
Copilot hat auch diese Erweiterungen für das Skript durchgeführt. An der CSV-Eingabe hat sich nichts geändert.
Aber das Skript ist schon umfangreicher geworden. Ich habe daher die Ausgaben in mehrere Segmente aufgeteilt:
Zuerst sehen wir her wieder den Import der CSV-Dateien und nun auch das Auslesen der vorhandenen Sites und Subnetze.
Die erste For-Schleife prüft zuerst, ob die Site oder das Subnetz schon da ist. Wenn es nicht vorhanden ist, wird es angelegt. Ansonsten wird das bestehende Subnetz aktualisiert.
Nachdem alle bestehenden Standporte und Subnetze angelegt oder aktualisiert wurden, kommt der Besenwagen und löscht alle die Sites und Subnetze, die in der CSV-Dateien nicht gefunden wurde:
Interessant finde ich, dass Copilot auch am Ende gleich eine Kurzfassung zum Skript ausgegeben hat, quasi eine Dokumentation der Funktion.
Der Code zum Download
manage_adsites_und_service.ps1.txt
Undo?
Schaue Sie sich Schaltflächen am Ende der vorherigen Antwort an: Copilot bietet mir sowohl die Funktion "Wie kann ich das Skript testen" als auch ein "Gibt es eine Möglichkeit, die Änderungen rückgängig zu machen?". Das hat mich natürlich interessiert, wenn das geht ja nur, indem man sich vorher die Konfiguration komplett exportiert. Also habe ich einfach den Button gedrückt.
Der Befehl "Start-Transaction" ist schon einmal gut, um viele Befehle entweder ganz oder gar nicht auszuführen. Dazu müssen aber die innerhalb der Transaktion ausgeführten Befehle den Parameter "-UseTransaction" unterstützen. Copilot addiert den Parameter an die Aufrufe.
Am Ende suggeriert Copilot, dass ich mit "Undo-Transaction" die Änderungen wieder rückgängig machen könnte
Der Versuch ist gut gemeint, aber scheitert. Es gibt in PowerShell durchaus die Funktion der "Transaktionen" und diese können auch rückgängig gemacht werden. Allerdings gilt dies nur für Commandlets, die auch den Parameter "-UseTransaction" unterstützen und zwischen "Start-Transaction" und "Complete-Transaction" stehen.
Leider gehören genau die AD-PowerShell-Befehle nicht dazu. Das weiß aber Copilot nicht oder reimt sich halt einfach die Befehle von anderen Seiten und Quellen zusammen
Quelle:
https://learn.microsoft.com/en-us/powershell/module/activedirectory/new-adreplicationsubnet
Hier versagt Copilot mit Pauken und Trompeten. Es wäre schon wünschenswert, wenn eine KI nicht nur Befehle einsetzt, sondern auch deren Parameter versteht und berücksichtigt.
- Start-Transaction
https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/start-transaction - Undo-Transaction
https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/undo-transaction
Zwischenstand
Ich finde die Leistung von Copilot schon beeindruckend. Mit wenigen Fragen und Korrekturen wird ein Code erstellt, der mir viel Zeit erspart hat. Sie müssen dazu nicht einmal den losgelösten Copilot nutzen, sondern können z.B. in VSCode auch direkt eine PS1-Datei starten, am Anfang die erwartete Funktion dokumentieren und zu codieren anfangen. Copilot wird ihnen Vorschläge zur Komplettierung machen, die meist auch mit wenig Änderungen übernommen werden können.
Aber als Administrator sollten Sie also genau den generierten Code anschauen, speziell wenn er später einmal mit privilegierten Rechten ausgeführt wird. Vielleicht haben Sie auch ein Konzept zur Protokollierung von Events, schreiben von Debuglogs etc. von denen Copilot natürlich nicht weiß.
Jede KI-Session fängt auch immer damit an, dass ein Mensch eine Aufgabenstellung erkannt hat und die richtigen Fragen formuliert. Dann ist eine KI aber ein effektiver Helfer, um eine Aufgabe in kürzerer Zeit zu erledigen.
Ich kann nur jedem Administrator empfehlen, sich mit Copilot und andere KIs zu beschäftigen. Insbesondere VSCode und das dazu passende Copilot-Modul sollten Sie auf ihrem Computer immer griffbereit haben.
Das obigen Skript habe ich übrigens als Vorlage genutzt, um dann mit Kunden einen Prozess zur halbautomatischen Aktualisierung umzusetzen. Das Skript holt die Informationen und startet es mit einem "-WhatIf", um dem Admin einen Bericht über die ausstehenden Änderungen zu generieren. Der Admin kann dann das Skript manuell im "Schreibmode" starten, um die Änderungen umzusetzen.
Weitere Links
- AD-Site
- AD Sitelink Replication Notification
- IP-Subnetz Liste
- PowerShell
- New-ADReplicationSubnet
https://learn.microsoft.com/en-us/powershell/module/activedirectory/new-adreplicationsubnet - GitHub Copilot in VS Code
https://code.visualstudio.com/docs/copilot/overview