Как сравнить два массива объектов DataRow в PowerShell?

StackOverflow https://stackoverflow.com/questions/21956

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

Чтобы просто сравнить два 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
    }
}

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top