我希望有人能够帮助解决我在比较数组时遇到的问题。
这里有一些背景。我有一个 powershell 脚本,它生成域控制器列表,检查它们是否在线,然后将数据写入 csv 文件。这工作正常。
我想每周运行一次,并在添加或删除任何域控制器时发送警报。
我有另一个脚本将先前生成的 CSV 导入到一个数组中,然后我生成一个新的域控制器列表并将该列表发送到一个新数组。我正在尝试使用 compare-object 比较两者,并导出一个带有差异列表的新 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"
}
如果有人有任何想法,请告诉我!
谢谢!约翰