DHCP XML Bearbeitung via Powershell
Hallo zusammen,
ich bin auf die Idee gekommen einen DHCP Server zu exportieren.
Die XML Datei enthält natürlich einzelne Werte die nicht auf dem neuen DHCP Server passen.
Wenn ich eine Scope exportiere funktioniert der untenstehende Skriptteil wunderbar.
Wenn ich aber nun z.B. 5 Scopes exportiere, werden durch die Schleifen nicht alle bearbeitet.
Kann mir hier mal jemand auf die Sprünge helfen?
Export:
Bearbeitung der XML Datei:
ich bin auf die Idee gekommen einen DHCP Server zu exportieren.
Die XML Datei enthält natürlich einzelne Werte die nicht auf dem neuen DHCP Server passen.
Wenn ich eine Scope exportiere funktioniert der untenstehende Skriptteil wunderbar.
Wenn ich aber nun z.B. 5 Scopes exportiere, werden durch die Schleifen nicht alle bearbeitet.
Kann mir hier mal jemand auf die Sprünge helfen?
Export:
Export-DhcpServer -ScopeID $DHCPScope -File $DHCPConfigXML -Leases -Force -ComputerName $QuellDHCPServer -Verbose
Bearbeitung der XML Datei:
$DHCPXML =[xml](Get-Content C:\DHCPdata.xml)
@($DHCPXML.DHCPServer.IPv4.Scopes.Scope.Reservations.SelectNodes("Reservation")) | %{$_.'Name'=($_.'Name' -replace 'oldfqdn','newfqdn')}
@($DHCPXML.DHCPServer.IPv4.Scopes.Scope.Leases.SelectNodes("Lease"))| %{$_.'HostName'=($_.'HostName' -replace 'oldfqdn','newfqdn')}
$DHCPXML.Save("C:\ForNewDHCPServer.xml")
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 2676299659
Url: https://administrator.de/contentid/2676299659
Ausgedruckt am: 21.11.2024 um 20:11 Uhr
2 Kommentare
Neuester Kommentar
Servus
https://tio.run/##vVbRbpswFH0eX4FQJ16GDTTJkorQpkmkIiVplETbpG2aGLiFLTEIO8 ...
Das einzige was ich mir bei dir vorstellen könnte wäre das du evt. nicht beachtet hast das -replace mit RegularExpression Syntax arbeitet. Des weiteren solltest du .SelectNodes nur verwenden wenn die Knoten auch wirklich keine XML-Namespace Angabe haben was sie i.d.R. beim DHCP-Export haben, wenn sie es haben das Ergebnis aber leer ist, was ich aber in älteren Versionen von hier aus nicht ausschließen kann, deswegen auf meine Methode ausweichen die ich in der Demo-Variante verwendet habe um die einzelnen Knoten abzuarbeiten.
Also statt
folgendes für den Input des Foreach-Objects
Wenn du zusätzlich natürlich noch IPv6 Scopes hast musst du diese auch berücksichtigen, im Moment bearbeitest du ja nur IPv4 Scopes.
Des weiteren musst du auch die Options berücksichtigen, wenn in denen auch der Domain-Name verwendet wird.
Willst du wirklich alle Vorkommen in Bereichen egal wo berücksichtigen kannst du etwas generisches wie
verwenden, das in allen Textknoten die alte Domain durch die neue ersetzt.
https://tio.run/##1VZrb9owFP28/Ioo6pRWWuwkQHgopKWANCSgCNA2aZumLLkt2cBBsY ...
Grüße Uwe
Wenn ich aber nun z.B. 5 Scopes exportiere, werden durch die Schleifen nicht alle bearbeitet.
Kann ich nicht nachvollziehen, klappt im Test einwandfrei, guckst du hier in der folgende Demo das Ergebnis, alle Namen die TESTLAB.INTERN enthalten werden ersetzt mit NEW.DOMAINhttps://tio.run/##vVbRbpswFH0eX4FQJ16GDTTJkorQpkmkIiVplETbpG2aGLiFLTEIO8 ...
$DHCPXML = New-Object XML
$DHCPXML.Load("C:\DHCPdata.xml") # Die Load Methode des XML-Objects ist etwas sicherer da sie das Encoding in der XML Declaration beachtet
$DHCPXML.DHCPServer.IPv4.Scopes.Scope.Reservations.Reservation | %{$_.Name = $_.Name -replace 'olddomain\.tld','newdomain.tld'}
$DHCPXML.DHCPServer.IPv4.Scopes.Scope.Leases.Lease | %{$_.HostName = $_.HostName -replace 'olddomain\.tld','newdomain.tld'}
$DHCPXML.Save("C:\ForNewDHCPServer.xml")
Das einzige was ich mir bei dir vorstellen könnte wäre das du evt. nicht beachtet hast das -replace mit RegularExpression Syntax arbeitet. Des weiteren solltest du .SelectNodes nur verwenden wenn die Knoten auch wirklich keine XML-Namespace Angabe haben was sie i.d.R. beim DHCP-Export haben, wenn sie es haben das Ergebnis aber leer ist, was ich aber in älteren Versionen von hier aus nicht ausschließen kann, deswegen auf meine Methode ausweichen die ich in der Demo-Variante verwendet habe um die einzelnen Knoten abzuarbeiten.
Also statt
$DHCPXML.DHCPServer.IPv4.Scopes.Scope.Reservations.SelectNodes("Reservation")
$DHCPXML.DHCPServer.IPv4.Scopes.Scope.Reservations.Reservation
Wenn du zusätzlich natürlich noch IPv6 Scopes hast musst du diese auch berücksichtigen, im Moment bearbeitest du ja nur IPv4 Scopes.
Des weiteren musst du auch die Options berücksichtigen, wenn in denen auch der Domain-Name verwendet wird.
Willst du wirklich alle Vorkommen in Bereichen egal wo berücksichtigen kannst du etwas generisches wie
$DHCPXML.DHCPServer.SelectNodes("//text()") | %{$_.innerText = $_.innerText -replace 'olddomain\.tld','newdomain.tld'}
https://tio.run/##1VZrb9owFP28/Ioo6pRWWuwkQHgopKWANCSgCNA2aZumLLkt2cBBsY ...
Grüße Uwe