Анализ XML-файла с помощью PowerShell

#.net #powershell #powershell-2.0

#.net #powershell #powershell-2.0

Вопрос:

Одно из моих приложений генерирует приведенный ниже 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 для этого?

Комментарии:

1. Пожалуйста, отметьте ответ с исправлением.

Ответ №1:

В 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
  

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

Ответ №2:

@Enrico Campidoglio предлагает «самое чистое» решение, которое здесь является своего рода старомодным.

 PS> $xml = [XML](get-content c:tempyourfile.xml)
PS> $errcode = ($xml.root.command | where {$_.property.name -eq "PWR.WakeupOnLAN" }).property.errorcode
  

Комментарии:

1. 1 для обратной совместимости. Ваш пример будет работать как в PowerShell 1.0, так и в 2.0.

Ответ №3:

Другой возможностью является создание функции. Аналогично решению 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
  

Комментарии:

1. @всем спасибо за ответы. Это действительно помогло мне.