Итак, вот фрагмент из моего файла web.config:.SelectSingleNode в Powershell скрипт с помощью XPath не работает на извлечение значения из файла 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>
То, что я пытаюсь сделать, это найти узел, использующий xPath через Powershell. Пара вещей, чтобы отметить об этом XML-файле:
есть несколько:
<location path="." inheritInChildApplications="false">
значение в файле XML. Они окружают другие узлы, как и т.д ...
я могу найти и заменить значение строки соединения успешно используют этот сценарий
$WebConfigFile = Join-Path $destination Web.config
[xml]$WebConfigXml = Get-Content ($WebConfigFile)
$WebConfigXml.configuration.location[2].connectionStrings.add | % { $_.connectionString = $_.connectionString -replace "some value", $sqlServerName }
Но когда я иду, чтобы заменить добавить ключ = значение «SiteDomain» с помощью этого скрипта :
$node = $WebConfigXml.configuration.location[3].appSettings.SelectSingleNode("add[@key = 'SiteDomain']")
$node.value = "someValue"
$WebConfigXml.Save($WebConfigFile)
не работает. Значение $ node в этом случае содержит пустую строку.
Я также пытаюсь только для чтения узла, как это:
$appSettingsSection = $WebConfigXml.configuration.location[3].appSettings;
$existingSiteDomain = $appSettingsSection.SelectSingleNode("add[@key='SiteDomain']")
И я все еще получаю пустую строку для значения $ existingSiteDomain.
Я просмотрел образцы, используя SelectSingleNode, и я не могу понять, как это понять. Не слишком уверен, что я делаю неправильно.
Спасибо, Майк
Хорошо, я попробовал это, но теперь я получаю сообщение об ошибке от Powershell. Он не знает, что XmlNamespaceManager: «XmlNamespaceManager: термин« XmlNamespaceManager »не распознается как имя командлета, функции, файла сценария или исполняемой программы. Проверьте правильность написания имени или если путь был включен, проверьте что путь правильный и повторите попытку. ". Я запускал «$ psversiontable.psversion» в командной строке powershell, и он говорит, что у меня установлена версия Powershell версии 3.0. Это какой-то тип проблемы с версией? –
Хорошо, я исправляю свой предыдущий комментарий. Сейчас он работает. Я думаю, что в моем скрипте была иная проблема синтаксиса, которая вызывала эту ошибку. Код, который вы предоставили, работал! Спасибо. Я новичок в Powershell и xPath, поэтому я понятия не имел об этой проблеме с пространством имен. –