如何比较PowerShell中的两个DataRow对象数组?
问题描述:
我有两个System.Data.DataRow
对象我想比较的阵列。如何比较PowerShell中的两个DataRow对象数组?
行有两列A和B.列A是一个键,我想知道哪些行的B列已更改以及哪些行已被添加或删除。
如何在PowerShell中执行此操作?
答
我写了一段脚本,稍后再执行此操作。脚本(Compare-QueryResults.ps1)可用here,您还需要我的Run-SQLQuery脚本(可用here),或者您可以使用您自己的脚本或函数替换它。
基本上,脚本的功能是将每个查询的结果分开,并将数据行分开,以便每个字段都是它自己的对象。然后它使用比较对象来检查这些行中的数据之间的差异。它返回一个比较对象,显示返回的数据之间的所有差异。
结果是一个对象,因此您可以将它们保存到一个变量中,并使用Sort-Object或Format- * cmdlet。
祝你好运。如果您对这些脚本有任何问题,请告诉我,我很乐意带您了解这些脚本。我一直在使用它们进行应用程序测试,通过程序中的不同操作查看哪些行正在被修改。
答
要简单地比较两个的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
}
}