Как сравнить два массива объектов DataRow в PowerShell?
-
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/