Verwalten von DNS-Zonen mit PowerShell

März 22, 2018 Sicherheit und Compliance, MOVEit

Wenn Sie Änderungen auf Ihrem Microsoft DNS-Server durch das DNS-MMC-Snap-In vornehmen, verschwenden Sie wahrscheinlich eine Menge Zeit.

Warum? Weil es möglich ist, DNS-Objekte in der MMC auch mit Hilfe von PowerShell zu erstellen, zu ändern und zu entfernen. Wenn Sie PowerShell benutzen, um den DNS zu verwalten, können Sie dies nicht nur von der Kommando-Zeile aus kontrollieren, sondern diese Kommandos auch in ein Skript eingeben, um alle möglichen zeitraubenden Aufgaben zu automatisieren.

Um den Umfang dieses Artikels nicht zu überschreiten, beschränke ich mich hier nur auf die Verwaltung der DNS-Zonen mit PowerShell, obwohl es sehr wohl möglich ist, auch andere DNS-Objekte wie Records und den Server selbst damit zu verwalten.

Ich gehe von einigen Grundvoraussetzungen aus: Erstens nehme ich an, dass Sie die Erlaubnis haben, die DNS-Zonen auf Ihrem Server zu lesen, zu ändern und zu löschen. Zweitens werde ich einige Konzepte von DNS-Servern zeigen, die sich in einer Active-Directory-Domain mit AD-integrierten Zonen befinden. PowerShell kann auch Zonen und Records verwalten, die außerhalb des Active Directory sind, aber das Ergebnis wird nicht genau das gleiche sein, wie das, was ich Ihnen hier zeige. Zuletzt müssen Sie eine Version der Remote Server Administration Tools (RSAT) auf Ihrem Clienten speziell für Ihr Betriebssystem installiert haben.

Zuerst testen Sie, ob das DNSServer-Module verfügbar ist. Dafür benutze ich das Cmdlet Get-Module.

PS C:\> Get-Module DnsServer -ListAvailable


    Directory: C:\Windows\system32\WindowsPowerShell\v1.0\Modules


ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Manifest   2.0.0.0    DnsServer                           {Add-DnsServerConditionalForwarderZone, Add-DnsServerDirectoryPartition, Add-DnsServerForwarder, Add-DnsServerPrimaryZone...}

Great! It looks like our module is downloaded and we have some available commands. Let's now see what commands we have to work with DNS zones.

PS C:\> Get-Command -Module DnsServer -Noun *Zone*

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Function        Add-DnsServerConditionalForwarderZone              2.0.0.0    DnsServer
Function        Add-DnsServerPrimaryZone                           2.0.0.0    DnsServer
Function        Add-DnsServerSecondaryZone                         2.0.0.0    DnsServer
Function        Add-DnsServerStubZone                              2.0.0.0    DnsServer
Function        Add-DnsServerZoneDelegation                        2.0.0.0    DnsServer
Function        Add-DnsServerZoneScope                             2.0.0.0    DnsServer
Function        Add-DnsServerZoneTransferPolicy                    2.0.0.0    DnsServer
Function        ConvertTo-DnsServerPrimaryZone                     2.0.0.0    DnsServer
Function        ConvertTo-DnsServerSecondaryZone                   2.0.0.0    DnsServer
Function        Export-DnsServerZone                               2.0.0.0    DnsServer
Function        Get-DnsServerDnsSecZoneSetting                     2.0.0.0    DnsServer
Function        Get-DnsServerGlobalNameZone                        2.0.0.0    DnsServer
Function        Get-DnsServerZone                                  2.0.0.0    DnsServer
Function        Get-DnsServerZoneAging                             2.0.0.0    DnsServer
Function        Get-DnsServerZoneDelegation                        2.0.0.0    DnsServer
Function        Get-DnsServerZoneScope                             2.0.0.0    DnsServer
Function        Get-DnsServerZoneTransferPolicy                    2.0.0.0    DnsServer
Function        Invoke-DnsServerZoneSign                           2.0.0.0    DnsServer
Function        Invoke-DnsServerZoneUnsign                         2.0.0.0    DnsServer
Function        Remove-DnsServerZone                               2.0.0.0    DnsServer
Function        Remove-DnsServerZoneDelegation                     2.0.0.0    DnsServer
Function        Remove-DnsServerZoneScope                          2.0.0.0    DnsServer
Function        Remove-DnsServerZoneTransferPolicy                 2.0.0.0    DnsServer
Function        Reset-DnsServerZoneKeyMasterRole                   2.0.0.0    DnsServer
Function        Restore-DnsServerPrimaryZone                       2.0.0.0    DnsServer
Function        Restore-DnsServerSecondaryZone                     2.0.0.0    DnsServer
Function        Resume-DnsServerZone                               2.0.0.0    DnsServer
Function        Set-DnsServerConditionalForwarderZone              2.0.0.0    DnsServer
Function        Set-DnsServerDnsSecZoneSetting                     2.0.0.0    DnsServer
Function        Set-DnsServerGlobalNameZone                        2.0.0.0    DnsServer
Function        Set-DnsServerPrimaryZone                           2.0.0.0    DnsServer
Function        Set-DnsServerSecondaryZone                         2.0.0.0    DnsServer
Function        Set-DnsServerStubZone                              2.0.0.0    DnsServer
Function        Set-DnsServerZoneAging                             2.0.0.0    DnsServer
Function        Set-DnsServerZoneDelegation                        2.0.0.0    DnsServer
Function        Set-DnsServerZoneTransferPolicy                    2.0.0.0    DnsServer
Function        Start-DnsServerZoneTransfer                        2.0.0.0    DnsServer
Function        Suspend-DnsServerZone                              2.0.0.0    DnsServer
Function        Sync-DnsServerZone                                 2.0.0.0    DnsServer
Function        Test-DnsServerDnsSecZoneSetting                    2.0.0.0    DnsServer

Dann erstelle ich eine Zone mit PowerShell. Dafür benutze ich die Funktion Add-DnsServerPrimaryZone. Dies kann man am einfachsten machen, indem man zwei Parameter benutzt. Diese Parameter sind “Name” und "ReplicationScope". In diesem Beispiel werde ich jedoch den Parameter “ComputerName” benutzen, da ich das Kommando von einem entfernten Computer aus aufrufen werde.

Add-DnsServerPrimaryZone -Name testzone.mylab.local -ComputerName DC -ReplicationScope Forest

Sie könne hier sehen, dass meine Domain „mylab.local“ ist und mein Zonenname „testzone“. Mein DNS-Server ist DC, also gebe ich das für meinen Parameter „ComputerName” an und zu guter Letzt, da mein Server auf meiner Domain ist, muss ich auch den ReplicationScope setzen, also habe ich die Zone unter allen anderen DNS servers in meinem Active Directory repliziert.

Als nächstes kann ich das Kommando Get-DnsServerZone benutzen, um sicherzustellen, dass die Zone erstellt wurde. Ich könnte den Parameter “Name” benutzen, aber um Ihnen alle Zonen zu zeigen, die ich habe, gebe ich nur mit „Get-DnsServerZone“ ein, sie alle zu finden.

PS C:\> Get-DnsServerZone -ComputerName DC

ZoneName                            ZoneType        IsAutoCreated   IsDsIntegrated  IsReverseLookupZone  IsSigned
--------                            --------        -------------   --------------  -------------------  --------
_msdcs.mylab.local                  Primary         False           True            False                False
0.in-addr.arpa                      Primary         True            False           True                 False
127.in-addr.arpa                    Primary         True            False           True                 False
255.in-addr.arpa                    Primary         True            False           True                 False
mylab.local                         Primary         False           True            False                False
testzone.mylab.local                Primary         False           True            False                False
TrustAnchors                        Primary         False           True            False                False

Und um sicher zu sein, dass wir durch den gesamten Lebenszyklus einer DNS-Zone gehen, lösche ich sie auch wieder.

PS C:\> Remove-DnsServerZone -Name testzone.mylab.local -ComputerName DC

Confirm

Das wird auch alle Einträge in der Zone löschen und der Server wird die Zone nicht länger hosten. Möchten Sie fortfahren?



[Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"): y
PS C:\> Get-DnsServerZone -ComputerName DC

ZoneName                            ZoneType        IsAutoCreated   IsDsIntegrated  IsReverseLookupZone  IsSigned
--------                            --------        -------------   --------------  -------------------  --------
_msdcs.mylab.local                  Primary         False           True            False                False
0.in-addr.arpa                      Primary         True            False           True                 False
127.in-addr.arpa                    Primary         True            False           True                 False
255.in-addr.arpa                    Primary         True            False           True                 False
mylab.local                         Primary         False           True            False                False
TrustAnchors                        Primary         False           True            False                False

Es gibt noch so viele andere Möglichkeiten mit der Verwaltung von DNS-Zonen in PowerShell. Ich rate Ihnen, alle Kommandos anzuschauen mit: Get-Command -Module DnsServer -Noun *Zone*. Dieses Kommando gibt Ihnen eine Liste aller Kommandos innerhalb des Moduls DnsServer, die „Zone“ in Ihrem Namen haben. Sie werden sehen, dass die Kommandos selbsterklärend sind und wenn Sie weitere Erklärungen über jedes brauchen, können Sie diese immer über Get-Help aufrufen.

Tipp: Lesen Sie dazu auch das Whitepaper Automatisieren mit PowerShell oder laden Sie sich kostenfrei eine Testversion von MOVEit Automation, Software für die Automatisierung der Dateiübertragung, herunter.

Adam Bertram

Adam Bertram is a 20-year veteran of IT. He’s currently an automation engineer, blogger, independent consultant, freelance writer, author, and trainer. Adam focuses on DevOps, system management, and automation technologies as well as various cloud platforms. He is a Microsoft Cloud and Datacenter Management MVP and efficiency nerd that enjoys teaching others a better way to leverage automation.

Read next Benutzung der neuen MOVEit 2018 REST API mit PowerShell