PowerShell で DataRow オブジェクトの 2 つの配列を比較するにはどうすればよいですか?
-
09-06-2019 - |
質問
2つの配列があります System.Data.DataRow
比較したいオブジェクト。
行には 2 つの列 A と B があります。列 A はキーであり、どの行の B 列が変更されたのか、どの行が追加または削除されたのかを調べたいと考えています。
PowerShell でこれを行うにはどうすればよいですか?
解決
少し前にこれを行うためのスクリプトを書きました。スクリプト (Compare-QueryResults.ps1) が利用可能です ここ そして、私の Run-SQLQuery スクリプト (利用可能) も必要になります。 ここ) または、それを独自のスクリプトまたは関数に置き換えることもできます。
基本的に、スクリプトは各クエリの結果を取得し、各フィールドが独自のオブジェクトになるようにデータ行を分割します。次に、Compare-Object を使用して、それらの行のデータ間の差異をチェックします。返されたデータ間のすべての違いを示す比較オブジェクトを返します。
結果はオブジェクトであるため、変数に保存し、Sort-Object または Format-* コマンドレットを使用できます。
幸運を。スクリプトに問題がある場合はお知らせください。喜んで説明させていただきます。私はこれらをアプリケーションのテストに使用して、プログラム内のさまざまなアクションによってどの行が変更されているかを確認しました。
他のヒント
2 つの 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
}
}
DataRow の配列が 2 つ必要ですか?DataRow オブジェクトには、必要なものを提供する RowState プロパティがあります。MSDN ドキュメントを参照してください。 http://msdn.microsoft.com/