Как я могу изменить значение атрибута name «Setting», используя скрипт powershell - PullRequest
1 голос
/ 11 апреля 2011

Как я могу изменить значение атрибута имени 'Setting', используя скрипт powershell

XML

**

<ServiceConfiguration serviceName="test" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration">
  <Role name="Role1">
    <Instances count="1" />
    <ConfigurationSettings>
      <Setting name="enableCounter" value="true" />
    </ConfigurationSettings>
  </Role>
  <Role name="Role2">
    <Instances count="1" />
    <ConfigurationSettings>
      <Setting name="enableCounter" value="true" />
    </ConfigurationSettings>
  </Role>
</ServiceConfiguration >

**

У меня есть такой скрипт, он не работает

$serviceconfigpath= "D:\ServiceConfiguration.cscfg"
$doc = new-object System.Xml.XmlDocument
$doc.Load($serviceconfigpath)

$testValue= "test"

foreach($n in $doc.selectnodes("/ServiceConfiguration/Role"))
{
    foreach($n in $doc.selectnode("/ServiceConfiguration/Role/ConfigurationSettings/Setting"))
    {
        switch($n.name)
        {
            "enableCounter" { $n.value = $testValue}
        }
    }
}

$doc.Save($serviceconfigpath)

Ответы [ 2 ]

1 голос
/ 11 апреля 2011

Вот пример того, как вы можете делать то, что вы хотите. Вы можете написать короче, я все подробно описал, просто чтобы объяснить.

$testValue= "test"

# Read the XML file
$file = Get-Content "c:\temp\FileBefore.xml"

# See it as an XMLDocument
$xml = [xml] $file

foreach ($role in $xml.ServiceConfiguration.role)
{
  # name before
  $role.ConfigurationSettings.Setting.name
  # modification
  $role.ConfigurationSettings.Setting.name = $testValue
  # name after
  $role.ConfigurationSettings.Setting.name  
}

# Save it back to a file
$xml.Save("c:\temp\FileAfter.xml")

JP

1 голос
/ 11 апреля 2011

Вам нужно исправить XML и использовать XmlNamespaceManager для доступа к документу:

$nsMgr = new-object xml.XmlNamespaceManager($doc.NameTable)
$doc.selectnodes("/ServiceConfiguration/Role/ConfigurationSettings/Setting", $nsMgr)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...