PowerShell DNS-Einträge ändern?
Hallo! Da ich in meiner Ausbildung zum Informatikkaufmann grade keine konkrete Aufgabe habe, wurde mir gesagt ich könnte ja mal gucken, ob ich mit PowerShell ein Script schreiben könnte, welches auf einem PC die DNS-Einträge löscht, und dann aktuelle Einträge (die man vorher im Script als Variable einträgt) hinzufügt.
Da ich vorher noch nie mit PowerShell gearbeitet habe, mich da erstmal grundlegend einarbeiten musste und das somit nicht geschafft habe, wollte ich mal fragen, ob das jemand machen könnte, oder es das vllt. auch schon irgendwo fertig gibt, da ich da eigentlich recht viel Spaß mit hatte und dann gerne sehen würde, wo meine Fehler lagen (die Mitarbeiter hier können das leider auch nicht, dass die mir da helfen könnten, war so eher so eine Kreativaufgabe bis ich wieder ne richtige Aufgabe bekomme =D) Wäre cool wenn jemand ne Antwort hätte =)
4 Antworten
Ich verstehe die Frage nicht 100%ig.
Du willst auf einem DNS-Server in deiner Firma alle DNS-Einträge löschen und spezifische neue hinzufügen?
Eine Übersicht über die Powershell-Befehle für DNS findest du hier: https://technet.microsoft.com/de-de/library/jj590772%28v=wps.630%29.aspx
Also willst du nur die DNS-Einstellungen des Netzwerkadapters auf die IP des neuen DNS-Servers umbiegen? Wieso macht ihr das nicht über DHCP? Das wäre doch deutlich einfacher.
Ansonsten halt über ein Batch-File
Primärer DNS:
netsh interface ipv4 set dns "Local Area Connection" static 192.168.0.2
Sekundärer:
netsh interface ipv4 add dns "Local Area Connection" 192.168.0.3 index=2
Wäre auch ne Idee, guck ich mir mal an!
Vllt sollte ich mein Problem mit PowerShell mal anders beschreiben.
Prinzipiell ist so Programmierung für mich vom logischen Denken her nicht das Problem, aber wenn ich jetzt z.B. den Befehl wie er von MS angegeben wird
"
Parameter Set: Remove2
Remove-DnsClientNrptRule [-Name] <String> [-AsJob] [-CimSession <CimSession[]> ] [-Force] [-GpoName <String> ] [-PassThru] [-Server <String> ] [-ThrottleLimit <Int32> ] [-Confirm] [-WhatIf] [ <CommonParameters>]
"
angucke, verstehe ich was das macht, aber in meiner eigenen Programmierung weiß ich mit den ganzen Parametern dahinter nix anzufangen. Klar, Name als String ist noch verständlich für mich, bei CimSession z.B. hört es dann aber schon auf, und das dann ordentlich in mein eigenes Programm zu bringen ist dann eher so ne Try-Error geschichte =D
Nutzt ihr NRPT? Falls ja, dann ist die Ausgangssituation wieder eine ganz andere. Aber dann verstehe ich nicht, was der Wechsel des DNS-Servers damit zu tun hat. Oder soll NRPT bei allen Clients rausgeworfen werden?
Wenn es dir, wie du oben schreibst, nur darum geht, dass der DNS-Server getauscht wird und ihr das den Clients irgendwie sagen müsst, dann bist du da in der falschen Richtung unterwegs.
Vielleicht liest du dich erst nochmal ein, wie DNS funktioniert. Dann dürfte dir einiges klarer werden.
Und bei den Batch Dateien habe ich grade bemerkt, dass ich nur die DNS-IPs verändere. Wenn ich das Richtig verstanden habe soll ich nach Möglichkeit die DNS Adressen in der Reihenfolge (also unter dem Reiter "Erweitert-DNS" und die DNS Suffix ändern. Das geht mit den Batch Datein ja nicht so, denke ich =D Trotzdem Danke^^
NRPT sagt mir leider gar nix, das war nur die Befehlszeile, die unter deinem Link den Removebefehl gegeben hatte =D
Naja, ich denke, das ist dann noch ein wenig zu hoch für mich ohne da Erfahrung zu haben, bin grade noch im ersten Ausbildungsjahr und wir haben eigentlich noch gar nix gemacht außer in der Schule ein bisschen Java =D
Trotzdem ein dickes Dankeschön!
Ah, jetzt kommen wir der Sache näher!
Habe mal ein bisschen rumprobiert.
Die entsprechenden Settings liegen in der Registry unter
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
Die entsprechenden zu ändernden Schlüssel heißen "SearchList" für den Suffix und "NameServer" für den DNS.
Mit dem CMD-Programm regini.exe kannst du Registry-Keys relativ einfach ändern/setzen.
Erstelle dir eine Textdatei mit folgendem (angepassten) Inhalt:
\Registry\Machine\System\CurrentControlSet\Services\TCPIP\Parameters
SearchList="suffix1,suffix2,suffix3"
NameServer="IPDNS1,IPDNS2,IPDNS3"
Die Zeilenabsätze müssen genau so bleiben.
Dann speicherst du dir das Textdokument irgendwo. Mach die CMD als Administrator auf und rufe Regini dann mit der TXT zusammen auf.
Beispielsweise so:
regini.exe C:\regconfig.txt
Das kannst du dir ja relativ leicht in eine Batch-Datei basteln.
Alternativ verteilt ihr die Registry-Änderung einfach über eine GPO.
Nach der Änderung muss der PC einmal neu gestartet werden!
Denk daran, deine Registry zu sichern, bevor du da rumtestest, nicht, dass du dir aus Versehen was zerschießt.
Öhm mal so als Einwurf: Habt ihr keinen DHCP? Eig. müsste das doch nur dort geändert werden. Sobald sich die Clients eine neue IP holen, sollte dann der neue DNS-Server genutzt werden.
Oder habt ihr die IP-Adressen bzw. den DNS statisch eingetragen? Wenn ja frage ich mich warum?
Naja für die Parameter hast du die Dokumentation.
https://technet.microsoft.com/de-de/library/jj590770%28v=wps.630%29.aspx
Dann zeig doch mal her was du bisher hast?
Btw. Wenn deine Kollegen/ausbilder dir sowas nicht zeigen können, denke mal über den Arbeitgeber nach;-)
Naja, wir sind hier in nem großen Betrieb und es gibt bestimmt jemanden, der das kann, aber die Abteilung in der ich grade bin spezialisiert sich auf die allgemeine Rechner adminstration, die Programmierer sitzen woanders =D
Ich werde dir zumindest vorerst keine komplette Lösung geben, da ich mehrere Punkte sehe.
1) Ihr bekommt einen neuen DNS-Server der auf allen Clients eingetragen werden soll. Benutzt ihr keinen DHCP oder ist die DNS-Adresse statisch eingetragen? Wenn ja warum?
2) Wie ist der Updatestand der Clients? Welche Powershellversion ist drauf/welches Betriebssystem? Irgendwelche Clients welche nicht auf Windows arbeiten?
3) Was hast du bisher mit Powershell gemacht? Hast du vorher schonmal programmiert? Wie ist dein Wissen da?
4) Auch wenn die Leutchen hier schreiben, solltest du ein etwaiges selbstgeschriebenes Script nicht hier posten, da es mWn deinem Arbeitgeber gehört (sofern während der Arbeitszeit geschrieben) und du somit keinerlei Recht auf Veröffentlichung hast.
5) Ich sehe da schon Möglichkeiten, leider wird es einfacher oder schwerer je nachdem wie die Umgebung von euch gestaltet ist.
Wie wäre es wenn du (zuerst) deine Arbeit einmal her zeigst?
Dann könnte man anhand deiner bisherigen Arbeit sagen was falsch war und dir die Fehler besser erläutern ;)
Grüße,
iMPerFekTioN
Würde ich, wäre ich so klug gewesen und hätte die Datei mitgenommen, bin schon Zuhause und die Datei liegt noch auf dem Rechner bei der Arbeit =D
PS C:\> Get-DnsServerResourceRecord -Name foo -RRType A -ZoneName test2.net
HostName RecordType Timestamp TimeToLive RecordData
-------- ---------- --------- ---------- ----------
foo A 0 01:00:00 10.0.0.1
PS C:\> Remove-DnsServerResourceRecord -ZoneName test2.net -Name foo -RRType A -Force
Nicht auf dem Server, sondern auf den einzelnen PCs der Nutzer.
Es geht darum, dass wir bald nen neuen DNS Server nutzen, weshalb wir auf allen 300+ Rechnern unserer Abteilung die DNS Einträge überarbeiten müssen. Damit das zeitlich nicht so viel Aufwand ist sollte ich mir das jetzt mal angucken ob ich das schaffe, dass das automatisch geht.
Mit der Befehlsliste habe ich gearbeitet, habe das allerdings nicht so hinbekommen, wie ich es gerne hätte =D