Question

J'ai deux tableaux de System.Data.DataRow objets que je souhaite comparer.

Les lignes comportent deux colonnes A et B.La colonne A est une clé et je souhaite savoir quelles lignes ont vu leur colonne B modifiée et quelles lignes ont été ajoutées ou supprimées.

Comment faire cela dans PowerShell ?

Était-ce utile?

La solution

J'ai écrit un script pour faire ça il y a quelque temps.Le script (Compare-QueryResults.ps1) est disponible ici et vous aurez également besoin de mon script Run-SQLQuery (disponible ici) ou vous pouvez le remplacer par votre propre script ou fonction.

Fondamentalement, le script prend les résultats de chacune de vos requêtes et divise les lignes de données afin que chaque champ soit son propre objet.Il utilise ensuite Compare-Object pour vérifier les différences entre les données de ces lignes.Il renvoie un objet de comparaison qui vous montre toutes les différences entre les données renvoyées.

Les résultats sont un objet, vous pouvez donc les enregistrer dans une variable et utiliser Sort-Object ou les applets de commande Format-* avec eux.

Bonne chance.Si vous rencontrez des problèmes avec les scripts, faites-le-moi savoir, je serai ravi de vous les expliquer.Je les utilise pour tester des applications, voyant quelles lignes sont modifiées par différentes actions dans un programme.

Autres conseils

Pour comparer simplement deux System.Data.DataRow, vous pouvez faire quelque chose comme ceci :

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

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

Avez-vous besoin de deux tableaux de DataRows ?l'objet DataRow possède une propriété RowState qui vous donnera ce dont vous avez besoin.Consultez la documentation MSDN : http://msdn.microsoft.com/

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top