How to update a string in the [xml] attribute using powershell?

Johne

New Member
I am having numerous web.config files. In which URL contains machine name. This is my sample web.config file\[code\]<?xml version="1.0" encoding="UTF-8"?><configuration><system.Model><client> <endpoint address="http://MyMachineName:80/MyProj/Core/NewService/SecurityObject.0/Secretservice.svc" binding="basicHttpBinding" bindingConfiguration="MyProj_Internal_Routing" behaviorConfiguration="UserSIDBehavior" contract="SecurityMgmt.SecurityMgmtContract" name="HttpEndpointSecMgt" /> <endpoint address="http://MyMachineName:80/MyProj/Core/DataObject/SystemCatalogs1.0/DataObjectservice/DataObjectservice.svc" binding="basicHttpBinding" bindingConfiguration="MyProj_Internal_Routing" behaviorConfiguration="UserSIDBehavior" contract="DataObjectservice.SystemCatalogsDataObjectservice" name="BasicHttpBinding_SystemCatalogsDataObjectservice" /> <endpoint address="http://MyMachineName:80/MyProj/Core/NewService/Movement.0/Movement.svc" binding="basicHttpBinding" bindingConfiguration="MyProj_Internal_Routing" behaviorConfiguration="UserSIDBehavior" contract="NavigationClientLib.NavigationNewService" name="BasicHttpBinding_NavigationNewService" /> </client> <system.Model> </configuration>\[/code\]When user changes machine name this has to be updated in all the xml files.I decided to write a function like this.\[code\] Function Update-MachineName ([string] $FilePath,[string] $xpath, [string] $NewMachineName="NewComputer") { # Get the config file contents $WebConfig = [XML] (Get-content $Filepath) #Find the url using xpath which has old Machine name $hostnameString= Select-XML -XML $WebConfig -XPath $Xpath Foreach ( $hostname in $hostnameString) { if ( ($hostname.Node.value -match 'http') -eq $true ) { $hostname.Node.value $MachineOldName = $($($hostname.Node.value.split("/"))[2].split(":"))[0] $MachineOldName $hostname.Node.value.replace( $MachineOldName,$NewMachineName) } } $WebConfig.Save($FilePath)}Update-MachineName "C:\web.config" "//@address"\[/code\]Though i replace with new machine name, still the web.config content doesn't updated. How to make it updated with the new Machine name
 
Back
Top