2016-09-29 61 views
0

我有下面的文本的文本文件之間的字符串:如何更換2個某些標籤

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

我希望能夠取代「」用read-host輸入一段文字。 例如,它從<ServerAddress>.</ServerAddress>改爲

<ServerAddress>server1</ServerAddress> 

我得遠作品的代碼...但它遍地的文件相同的字符串替換中的一切,所以在上面的例子,那就得與<ServerAddress>server1</ServerAddress>

這裏代替一切是我到目前爲止有:

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 
} 

回答

0

不要使用正則表達式替換XML內容。相反,加載該文件作爲XML,選擇節點,並設置值:

實施例:

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

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