#.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. @всем спасибо за ответы. Это действительно помогло мне.