Arrays 如何比较PowerShell中的两个DataRow对象数组?

Arrays 如何比较PowerShell中的两个DataRow对象数组?,arrays,powershell,comparison,Arrays,Powershell,Comparison,我有两个要比较的System.Data.DataRow对象数组 这些行有两列A和B。列A是一个键,我想找出哪些行的B列已更改,哪些行已添加或删除 如何在PowerShell中执行此操作?是否需要两个数据行数组?DataRow对象有一个RowState属性,它将为您提供所需的内容。请参阅MSDN文档:不久前,我编写了一个脚本来执行此操作。脚本(Compare QueryResults.ps1)可用,您还需要我的Run SQLQuery脚本(可用),或者您可以用自己的脚本或函数替换它 基本上,脚本所

我有两个要比较的
System.Data.DataRow
对象数组

这些行有两列A和B。列A是一个键,我想找出哪些行的B列已更改,哪些行已添加或删除


如何在PowerShell中执行此操作?是否需要两个数据行数组?DataRow对象有一个RowState属性,它将为您提供所需的内容。请参阅MSDN文档:

不久前,我编写了一个脚本来执行此操作。脚本(Compare QueryResults.ps1)可用,您还需要我的Run SQLQuery脚本(可用),或者您可以用自己的脚本或函数替换它

基本上,脚本所做的是获取每个查询的结果,并将数据行分开,以便每个字段都是它自己的对象。然后,它使用Compare对象检查这些行中的数据之间的任何差异。它返回一个比较对象,显示返回的数据之间的所有差异

结果是一个对象,因此您可以将其保存到变量中,并对其使用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
    }
}