0

我已经坚持了一段时间,无法弄清楚我错过了什么。我有一个 XML 文件,它是相机服务器配置的导出文件。我想将用户与他们有权使用但正在努力弄清楚如何使用的相机进行匹配。

这是 XML 的示例:

<?xml version="1.0" encoding="UTF-8"?>
<ExportedConfiguration verification="-11111111">
    <config timestamp="2017-05-30-08-35-21-533">
        <Users>
            <userlist>
                <user0>
                    <username>Smith, John</username>
                    <cameras>
                        <UserCamera-fd346f0a-362c-4171-b015-b3884db7d60f>
                            <cameraid>Inside-Camera1</cameraid>
                        </UserCamera-fd346f0a-362c-4171-b015-b3884db7d60f>
                    </cameras>
                </user0>
                <user1>
                    <username>Smith, Jane</username>
                    <cameras>
                        <UserCamera-07798ce7-b3fd-4cae-a0cd-339de22f38ab>
                            <cameraid>Outside-Camera1</cameraid>
                        </UserCamera-07798ce7-b3fd-4cae-a0cd-339de22f38ab>
                    </cameras>
                </user1>
              </userlist>
          </Users>

问题是所有内容都属于<user#>并且相机信息属于. 我想我需要某种基于但不确定从哪里开始的循环。<UserCamera-####><user#>foreach<user#>

[编辑] 这是我到目前为止所拥有的。运行时它只显示“cameraid”而不是实际名称:

[xml]$file = Get-Content videoserver.xml
$xmlProperties = $file.SelectNodes("//Users/userlist/*")
$o = New-Object Object
foreach ($xmlProperty in $xmlProperties) {
  $username = $xmlproperty.username
  $camera = $xmlProperties |
            Select-Xml -XPath "//cameraid" |
            Select-Object –ExpandProperty “node”

  [PSCustomObject]@{
    username = $username;
    Cameras  = $camera
  }
}
4

1 回答 1

0

像这样的东西应该工作:

$file.SelectNodes("//Users/userlist/*") | ForEach-Object {
  [PSCustomObject]@{
    Username = $_.username
    Cameras  = $_.cameras.ChildNodes.cameraid -join ', '
  }
}
于 2017-06-09T13:28:45.440 回答