【问题标题】:Read XML Structure in PowerShell and export it to XLS在 PowerShell 中读取 XML 结构并将其导出到 XLS
【发布时间】:2014-08-05 19:51:04
【问题描述】:

我正在努力使用 Powershell 阅读以下 XML 文件的内容。我想获得关联数组,其中每个 <value> 的 CN/OU 部分作为标识符,每个 <roll><group> 作为属性。

<?xml version="1.0" encoding="UTF-8"?>
<ldap>
    <host>x.x.x.x
        <users>
            <user>DC=Example,DC=internal</user>
        </users>
        <rights>
            <var>distinguishedName
                <value>CN=...,OU=user,OU=...
                    <roll>2</roll>
                </value>
                <value>CN=...,OU=user,OU=...
                    <roll>5</roll>
                    <roll>18</roll>
                </value>
                <value>CN=John Doe*
                    <roll>9</roll>
                </value>
                <value>CN=Domain Admin*
                    <group>Administrator</group>
                    <roll>1</roll>
                </value>
                <value>CN=...,OU=user,...
                    <group>Example Group</group>
                    <roll>8</roll>
                    <roll>12</roll>
                    <roll>14</roll>
                    <roll>15</roll>
                </value>
            </var>
            <var>search:member=&lt;userdn&gt;
                <value>CN=group1*
                    <group>01 Group XY</group>
                    <roll>1</roll>
                </value>
                <value>CN=Client1,OU=*
                    <roll>3</roll>
                </value>
                <value>CN=...,OU=*
                    <roll>5</roll>
                </value>
                <value>CN=ImportantClient06*
                    <group>06ImportantGroup</group>
                    <roll>8</roll>
                    <roll>11</roll>
                    <roll>12</roll>
                </value>
            </var>
        </rights>
    </host>
</ldap>

这是我的第一个方法:

$d3Xml = [XML] (Get-Content -Path $d3ConfigPath)
$XmlValues = $d3Xml.ldap.host.rights.var

Write-Host "Xml Value: " $XmlValues

我在这种 xml 结构上找不到任何帮助。感谢您的帮助,谢谢!

【问题讨论】:

  • 您的 xml 文件中缺少 结束标记。
  • 好的,我在匿名化原始 XML 时错过了这一点。对不起。 :(

标签: xml powershell


【解决方案1】:

你可以从这里开始:

$xmlSource = @"
<?xml version="1.0" encoding="UTF-8"?>
<ldap>
<host>x.x.x.x
    <users>
        <user>DC=Example,DC=internal</user>
    </users>
    <rights>
        <var>distinguishedName
            <value>CN=...,OU=user,OU=...
                <roll>2</roll>
            </value>
            <value>CN=...,OU=user,OU=...
                <roll>5</roll>
                <roll>18</roll>
            </value>
            <value>CN=John Doe*
                <roll>9</roll>
            </value>
            <value>CN=Domain Admin*
                <group>Administrator</group>
                <roll>1</roll>
            </value>
            <value>CN=...,OU=user,...
                <group>Example Group</group>
                <roll>8</roll>
                <roll>12</roll>
                <roll>14</roll>
                <roll>15</roll>
            </value>
        </var>
        <var>search:member=&lt;userdn&gt;
            <value>CN=group1*
                <group>01 Group XY</group>
                <roll>1</roll>
            </value>
            <value>CN=Client1,OU=*
                <roll>3</roll>
            </value>
            <value>CN=...,OU=*
                <roll>5</roll>
            </value>
            <value>CN=ImportantClient06*
                <group>06ImportantGroup</group>
                <roll>8</roll>
                <roll>11</roll>
                <roll>12</roll>
            </value>
        </var>
    </rights>
</host>
</ldap>
"@

$xml = [xml] $xmlSource

$xml | select-xml -xpath "//value" | %{ 
        New-Object -TypeName PSObject -Property @{
                CNOU = $_.Node."#text" 
                Group = $_.Node.group
                Roll = $_.Node.roll
        }
    } | select CNOU, group, Roll

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-30
  • 1970-01-01
相关资源
最近更新 更多