.SelectSingleNode w skrypcie Powershell za pomocą xPath nie działa na wyodrębnianie wartości z pliku web.config

Dobra, oto fragment mojego pliku web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<location path="." inheritInChildApplications="false">
<connectionStrings>
...
</connectionStrings>
</location>
<location path="." inheritInChildApplications="false">
<appSettings>
<!--IT Ops-->
<add key="SomeOtherKey" value="SomeOtherValue" />
<add key="SiteDomain" value="somedomain.com" />
<add key="SomeOtherKey" value="SomeOtherValue" />
....
</appSettings>
</location>
</configuration>

Próbuję znaleźć węzeł za pomocą xPath za pomocą Powershell. Kilka rzeczy do odnotowania na temat tego pliku XML:

istnieje wiele:

<location path="." inheritInChildApplications="false"> 

wartości w pliku xml. Otaczają inne węzły, takie jak ...

Mogę znaleźć i zastąpić wartości ciągu połączenia pomyślnie za pomocą tego skryptu

$WebConfigFile = Join-Path $destination Web.config
[xml]$WebConfigXml = Get-Content ($WebConfigFile)
$WebConfigXml.configuration.location[2].connectionStrings.add | % { $_.connectionString = $_.connectionString -replace "some value", $sqlServerName }

Ale kiedy idę zastąpić wartość add key = „SiteDomain” za pomocą tego skryptu:

$node = $WebConfigXml.configuration.location[3].appSettings.SelectSingleNode("add[@key = 'SiteDomain']")
$node.value = "someValue"
$WebConfigXml.Save($WebConfigFile)

to nie działa. Wartość $ node w tym przypadku zawiera pusty łańcuch.

Próbuję też po prostu odczytać węzeł w ten sposób:

$appSettingsSection = $WebConfigXml.configuration.location[3].appSettings;
$existingSiteDomain = $appSettingsSection.SelectSingleNode("add[@key='SiteDomain']")

Nadal otrzymuję pusty ciąg dla wartości $ existingSiteDomain.

Przejrzałem próbki przy użyciu SelectSingleNode i nie mogę tego zrozumieć. Nie jestem pewien, co robię źle.

Dzięki, Mike

questionAnswers(1)

yourAnswerToTheQuestion