配列の比較に遭遇した問題を誰かが解決してくれることを期待していました。
ここにいくつかの背景があります。ドメインコントローラーのリストを生成し、それらがオンラインかどうかを確認してから、データをcsvファイルに書き込むpowershellスクリプトがあります。これはうまくいきます。
これを毎週実行し、ドメイン コントローラが追加または削除された場合にアラートを送信したいと考えています。
以前に生成された CSV をアレイにインポートする別のスクリプトがあり、次にドメイン コントローラーの新しいリストを生成し、そのリストを新しいアレイに送信します。比較オブジェクトを使用して 2 つを比較し、相違点のリストを含む新しい CSV をエクスポートしようとしています。
ただし、古い CSV を手動で変更してこれをテストしています。前のリストからどのドメイン コントローラーを削除しても、新しいドメイン コントローラーをどこに追加しても、変更が最後のドメイン コントローラーであると常に報告されることがわかりました。リストに。
たとえば、私の CSV ファイルは次のようになります。
"DC_Name","Ping_Response"
"dc1.testcompany.com","online"
"dc2.testcompany.com","online"
"dc3.testcompany.com","online"
"dc4.testcompany.com","online"
「dc3.testcompany.com」、「online」を削除してスクリプトを再度実行してこれをテストすると、リストが変更されたことがわかりますが、新しいエントリは「dc4.testcompany.com」、「online」であると報告されます。 「dc3.testcompany.com」、「オンライン」ではありません。
同様に、古い csv を次のように変更すると、次のようになります。
"DC_Name","Ping_Response"
"dc1.testcompany.com","online"
"dc2.testcompany.com","online"
"dc5.testcompany.com","online"
"dc3.testcompany.com","online"
"dc4.testcompany.com","online"
新しいリストと異なるのは「dc4.testcompany.com」、「online」であり、途中で追加したものではないことが報告されます。
私は自分の比較で何か間違ったことをしているに違いありません。私が使用しているスクリプトの関連部分は次のとおりです。
$newDCArray = @(Import-CSV DC_List.csv)
$oldDCArray = @(Import-CSV Last_DC_List.csv)
$diff = Compare-Object $oldDCArray $newDCArray
if($diff -eq $null)
{
Write-Host "No changes to DCs"
}
else
{
Write-Host "There have been changes to DCs"
$diff| Export-CSV DC_Change_List.csv -notypeinformation
Send-MailMessage –From "xxxx@xxxxxxxx.com" –To "xxxx@xxxxxxxx.com" –Subject "Alert - Domain Controllers Added or Removed" –Body "DC Report Attached" –SmtpServer "smtp.xxxxxxxxxxx.net" -Attachments "DC_Change_List.csv"
}
誰かアイデアがあれば教えてください!
ありがとうございました!ジョン