gpt4 book ai didi

Powershell - 比较两个数组返回错误的结果

转载 作者:行者123 更新时间:2023-12-01 01:15:12 25 4
gpt4 key购买 nike

我希望有人能够帮助解决我在比较数组时遇到的问题。

这是一些背景。我有一个生成域 Controller 列表的 powershell 脚本,检查它们是否在线,然后将数据写入 csv 文件。这工作正常。

我想每周运行一次,并在添加或删除任何域 Controller 时发送警报。

我有另一个脚本将先前生成的 CSV 导入到一个数组中,然后生成一个新的域 Controller 列表并将该列表发送到一个新数组。我正在尝试使用比较对象来比较两者,并导出一个带有差异列表的新 CSV。

但是,我正在通过手动修改旧的 CSV 进行测试,我发现无论我从上一个列表中删除哪个域 Controller 或在何处添加新的域 Controller ,它总是报告更改是最后一个域 Controller 在名单上。

例如,我的 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"
}

如果有人有任何想法,请告诉我!

谢谢!
约翰

最佳答案

Import-Csv 返回的对象不是您应该与之进行比较的“真实”对象。它们是动态生成的自定义对象。您会注意到,如果您对 $newDCArray[0] -eq $oldDCArray[0] 进行显式检查,它将返回 $false .由于根本不存在用于检查相等性的适当管道,Compare-Object没有希望正常工作。

不过没关系。 Compare-Object有一个 -Property允许您查看给定对象的 1 个或多个特定属性的参数。属性是真实的对象(字符串),因此比较有效。在您的情况下,您对 2 处房产感兴趣 - DC_NamePing_Response ,因为您想知道服务器是否是新的/已删除,以及已知服务器是否已离线。

这应该适合你:

Compare-Object $oldDCArray $newDCArray -Property 'DC_Name','Ping_Response'

另外,请确保 -SyncWindow足够大,使得比较是准确的。或者有时在比较之前简单地对数组进行排序是最简单的,因此您无需担心。

关于Powershell - 比较两个数组返回错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12465819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com