将XML转换为PSObject

Cha*_*ler 19 xml powershell

注意:我正在使用ConvertTo-XML,不能使用Export-Clixml:

我创建一个简单的PSObject:

$a = New-Object PSObject -Property @{
    Name='New'
    Server = $null
    Database = $null
    UserName = $null
    Password = $null
}
Run Code Online (Sandbox Code Playgroud)

然后我使用ConvertTo-XML以下方法将其转换为XML :

$b = $a | Convertto-XML -NoTypeInformation
Run Code Online (Sandbox Code Playgroud)

XML看起来像这样:

<?xml version="1.0"?>
<Objects>
  <Object>
    <Property Name="Password" />
    <Property Name="Name">New</Property>
    <Property Name="Server" />
    <Property Name="UserName" />
    <Property Name="Database" />
  </Object>
</Objects>
Run Code Online (Sandbox Code Playgroud)

我无法找出点符号或XPath查询来提取属性/元素并转换$b回原始PSObject.

Jos*_*osh 17

你可以使用XPath轻松完成这项工作.虽然PowerShell通常使得使用XML非常简单,但在这种情况下,我认为使用严格的PowerShell语法的格式非常粗略.

filter XmlProperty([String]$Property) {
    $_.SelectSingleNode("/Objects/Object/Property[@Name='$Property']").InnerText
}

$Name = $b | Xmlproperty Name
$Server = $b | XmlProperty Server
# etc...
Run Code Online (Sandbox Code Playgroud)

编辑:通常对包含一个或多个Object元素的XML文档执行此操作,您可以执行以下操作:

function ConvertFrom-Xml($XML) {
    foreach ($Object in @($XML.Objects.Object)) {
        $PSObject = New-Object PSObject
        foreach ($Property in @($Object.Property)) {
            $PSObject | Add-Member NoteProperty $Property.Name $Property.InnerText
        }
        $PSObject
    }
}

ConvertFrom-Xml $b
Run Code Online (Sandbox Code Playgroud)