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

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

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

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

22.08.2008 09:00:26
3 ОТВЕТА
РЕШЕНИЕ

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

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

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

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

4
22.08.2008 12:53:16

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

0
23.01.2013 05:11:33

Чтобы просто сравнить два 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
    }
}
1
27.01.2018 01:59:29