Анализ файла XML с помощью PowerShell - PullRequest
7 голосов
/ 09 мая 2011

Одно из моих приложений генерирует ниже XML-файл.

<root>
    <command name="Set">
        <property name="PWR.WakeupOnLAN" value="6" errorcode="0x0"/>
    </command>
    <command name="Set">
    </command>
    <command name="biossettings">
        <property name="task" value="Succeeded." errorcode="0x0"/>
    </command>
</root>

Я заинтересован в чтении значения и кодов ошибок имени свойства "PWR.WakeupOnLAN". Прежде чем писать здесь, я пробовал разные вещи, но не смог найти правильный код для чтения свойств в powershell. Может ли кто-нибудь помочь мне с кодом PowerShell для этого?

Ответы [ 3 ]

12 голосов
/ 09 мая 2011

В PowerShell 2.0 вы можете решить эту проблему с помощью нового Select-Xml командлета и XPath выражения:

[xml]$document = "<root><command name='Set'><property name='PWR.WakeupOnLAN' value='6' errorcode='0x0'/></command><command name='Set'></command><command name='biossettings'><property name='task' value='Succeeded.' errorcode='0x0'/></command>"

$value = (Select-Xml -Xpath "//property[@name='PWR.WakeupOnLAN']/@value" $document).Node.Value
$errorCode = (Select-Xml -Xpath "//property[@name='PWR.WakeupOnLAN']/@errorcode" $document).Node.Value

Связанные ресурсы:

8 голосов
/ 09 мая 2011

@ Энрико Кампидоглио дает «самое чистое» решение, это своего рода старая мода.

PS> $xml = [XML](get-content c:\temp\yourfile.xml)
PS> $errcode = ($xml.root.command | where {$_.property.name -eq "PWR.WakeupOnLAN" }).property.errorcode
2 голосов
/ 09 мая 2011

Еще одна возможность, это создать функцию.Аналогично решению JPBlanc.

function Get-Info ($name='PWR.WakeupOnLAN', $targetXml){
    $properties = $targetXml.GetElementsByTagName("property") 
    $properties | Where {$_.Name -eq $name}
}

Get-Info -targetXml $xml
Get-Info -name Task -targetXml $xml
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...