Frage

Ich habe zwei Arrays von System.Data.DataRow Objekte, die ich vergleichen möchte.

Die Zeilen haben zwei Spalten A und B.Spalte A ist ein Schlüssel und ich möchte herausfinden, bei welchen Zeilen die B-Spalte geändert wurde und welche Zeilen hinzugefügt oder gelöscht wurden.

Wie mache ich das in PowerShell?

War es hilfreich?

Lösung

Ich habe vor einiger Zeit ein Skript dafür geschrieben.Das Skript (Compare-QueryResults.ps1) ist verfügbar Hier und Sie benötigen außerdem mein Run-SQLQuery-Skript (verfügbar). Hier) oder Sie können dies durch ein eigenes Skript oder eine eigene Funktion ersetzen.

Im Grunde nimmt das Skript die Ergebnisse jeder Ihrer Abfragen und teilt die Datenzeilen auf, sodass jedes Feld ein eigenes Objekt ist.Anschließend wird mithilfe von Compare-Object überprüft, ob Unterschiede zwischen den Daten in diesen Zeilen vorliegen.Es gibt ein Vergleichsobjekt zurück, das Ihnen alle Unterschiede zwischen den zurückgegebenen Daten zeigt.

Die Ergebnisse sind ein Objekt, Sie können sie also in einer Variablen speichern und mit ihnen Sort-Object oder die Format-*-Cmdlets verwenden.

Viel Glück.Wenn Sie Probleme mit den Skripten haben, lassen Sie es mich wissen, ich führe Sie gerne durch die Skripte.Ich habe sie für Anwendungstests verwendet, um zu sehen, welche Zeilen durch verschiedene Aktionen in einem Programm geändert werden.

Andere Tipps

Um einfach zwei System.Data.DataRow zu vergleichen, können Sie so etwas tun:

foreach ($property in ($row1 | Get-Member -MemberType Property)) {
    $pName = $property.Name

    if ($row1.$pName -ne $row2.$pName) {
        Write-Host "== $pName =="
        $row1.$pName
        $row2.$pName
    }
}

Benötigen Sie zwei Arrays von DataRows?Das DataRow-Objekt verfügt über eine RowState-Eigenschaft, die Ihnen das liefert, was Sie benötigen.Siehe die MSDN-Dokumente: http://msdn.microsoft.com/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top