2016-09-29 3 views
0

ich eine Textdatei mit dem folgenden Text haben in: „“Wie kann ich eine Zeichenfolge zwischen zwei bestimmten Tags ersetzen

<ServerAddress>.</ServerAddress> 
<ServerDatabase>test</ServerDatabase> 
<ServerUsername>jimmy</ServerUsername> 

Ich möchte das ersetzen können, mit einem read-host eingegebenen Textstück. Zum Beispiel aus <ServerAddress>.</ServerAddress> ändern

<ServerAddress>server1</ServerAddress> 

Der Code, den ich zu weit Werke haben ... aber es ersetzt alles in der Datei auf die gleiche Zeichenfolge über und über, so in dem Beispiel von oben, müsste es Hier ersetzt alles mit <ServerAddress>server1</ServerAddress>

ist das, was ich bisher:

pushd "C:\PSF\Move to V6\DTT Files" 
$configFiles = Get-ChildItem . *.dtt -rec 
$servername = Read-Host 'What the server name?' 
$regex='(m?)>[^<]+<' 
foreach ($file in $configFiles) 

{ 
(Get-Content $file.PSPath) | 
Foreach-Object { "<ServerAddress>.</ServerAddress>" -replace $regex, ">$servername<" } | 
Set-Content $file.PSPath 
} 

Antwort

0

nicht Regex verwenden, um XML-Inhalte zu ersetzen. Stattdessen laden Sie die Datei als XML, den Knoten auswählen und die Werte gesetzt:

Beispiel:

[xml]$xml = 
@' 
<root> 
    <ServerAddress>.</ServerAddress> 
    <ServerDatabase>test</ServerDatabase> 
    <ServerUsername>jimmy</ServerUsername> 
</root> 
'@ 

$xml.DocumentElement.ServerAddress = 'newServer' 
$xml.Save('yourLocation') 
Verwandte Themen