Как сравнить два массива объектов DataRow в PowerShell? - PullRequest
4 голосов
/ 22 августа 2008

У меня есть два массива System.Data.DataRow объектов, которые я хочу сравнить.

Строки имеют два столбца A и B. Столбец A является ключом, и я хочу выяснить, для каких строк были изменены столбцы B, а какие были добавлены или удалены.

Как мне сделать это в PowerShell?

Ответы [ 3 ]

4 голосов
/ 22 августа 2008

Я написал скрипт, чтобы сделать это некоторое время назад. Сценарий (Compare-QueryResults.ps1) доступен здесь , и вам также понадобится мой сценарий Run-SQLQuery (доступен здесь ), или вы можете заменить его сценарием или функцией вашего владеть.

По сути, сценарий берет результаты каждого из ваших запросов и разбивает данные на части, так что каждое поле является своим собственным объектом. Затем он использует Compare-Object для проверки любых различий между данными в этих строках. Он возвращает объект сравнения, который показывает все различия между возвращаемыми данными.

Результаты представляют собой объект, поэтому вы можете сохранить их в переменной и использовать с ними командлет Sort-Object или Format- *.

Удачи. Если у вас есть какие-либо проблемы со сценариями, дайте мне знать, я был бы рад помочь вам с ними. Я использовал их для тестирования приложений, чтобы увидеть, какие строки изменяются различными действиями в программе.

1 голос
/ 27 января 2018

Чтобы просто сравнить два System.Data.DataRow, вы можете сделать что-то вроде этого:

foreach ($property in ($row1 | Get-Member -MemberType Property)) {
    $pName = $property.Name

    if ($row1.$pName -ne $row2.$pName) {
        Write-Host "== $pName =="
        $row1.$pName
        $row2.$pName
    }
}
0 голосов
/ 22 августа 2008

Вам нужны два массива DataRows? объект DataRow имеет свойство RowState, которое даст вам то, что вам нужно. См. Документы MSDN: http://msdn.microsoft.com/

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