Сравните часть XML-файлов узла, используя powershell - PullRequest
0 голосов
/ 04 июля 2019

Я хочу сравнить часть xml-дерева двух файлов (GPO-> Компьютер из GPOReport).

$Xml1 = Get-Object $Path1
$Xml2 = Get-Object $Path2

Compare-Object ($Xml1) -DifferenceObject ($Xml2)

дает полные отличия от файла. Но я хочу только часть узла.

Ответы [ 2 ]

1 голос
/ 04 июля 2019

Сравнение деревьев (т. Е. XML-документа) немного сложнее, чем сравнение двух списков (например, строк в двух файлах).

Из вашего вопроса неясно, насколько обширное сравнение вы ищете здесь, но если вас интересует только тестирование одного значения или атрибута между двумя XML-документами, возможно, самое простое - с Select-Xml:

$xml1 = [xml]@'
<root>
  <nodegroup>
    <node name="myNode">SomeValue</node>
  </nodegroup>
</root>
'@
$xml2 = [xml]@'
<root>
  <nodegroup>
    <node name="myNode">SomeOtherValue</node>
  </nodegroup>
</root>
'@

$res1,$res2 = $xml1,$xml2 |Select-Xml -XPath 'root/nodegroup/node[@name = "myNode"]'

if($res1.Node.InnerText -eq $res2.Node.InnerText){
    # the inner text value of the selected node is the same in both documents
}
0 голосов
/ 05 июля 2019
$xml1 = Get-Content -Path "D:\gpo-test\gpo-original.xml"
$xml2 = Get-Content -Path "D:\gpo-test\gpo.xml"

#$XmlActive.GetType().FullName
$res1,$res2 = $xml1,$xml2 |Select-Xml -XPath '//gpo/computer'

if($res1.Node.InnerText -eq $res2.Node.InnerText){
    # the inner text value of the selected node is the same in both documents
}

xml strcuture это:

<GPO xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.microsoft.com/GroupPolicy/Settings">
  <Computer>
   ...
  </Computer>

Я получаю ошибку

Select-Xml : Cannot validate argument on parameter 'Content'. The argument is null or empty. Provide an argument that
is not null or empty, and then try the command again.
At D:\gpo-test\compare.ps1:15 char:28
+ $res1,$res2 = $xml1,$xml2 |Select-Xml -XPath '//gpo/computer'
+                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (System.Object[]:Object[]) [Select-Xml], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.SelectXmlCommand

Я хочу получить полное дерево под и сравнить его с тем, что в другом файле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...