【发布时间】:2019-10-24 22:09:06
【问题描述】:
我有两张表,我需要比较今天的值和昨天的值之间的差异,并告诉我发生了什么变化。注意:我在图片中的两个表格中使用了“今天”和“昨天”而不是日期,但实际表格有日期。
我需要一个 Powershell 脚本,它将获取 DeviceName 和 PowerState 并告诉我昨天和今天之间发生了哪些变化。在示例中,我只需要它告诉我从昨天到今天的变化:“设备 B 已关闭”。然后,我将每天运行该脚本以向我的团队发送电子邮件。该脚本还应该让我知道设备是否从昨天到今天开机。
数据在 SQL 中,在 PowerShell 中,我已将数据从 SQL 中提取到两个单独的 CSV 中,然后将每个 CSV 导入到两个单独的数组中。我正在考虑一个 ForEach 循环来遍历每个设备名称,但我被困在那里。
这是我正在使用的脚本。 (运行查询是我正在加载的模块中的一个函数)。为保护我们,服务器名称已更改为“ServerA”。
Import-Module TeamTools -DisableNameChecking
$YD=(Get-date (get-date).AddDays(-1) -Format "MM-dd-yyyy")
$TD=Get-Date -Format "MM-dd-yyyy"
$YData=Run-query -server ServerA -database Inventory -query "SELECT DeviceName,Powerstate FROM DeviceInventoryHistory WHERE SampleDate = '$YD' ORDER BY DeviceName"
$TData=Run-query -server ServerA -database Inventory -query "SELECT DeviceName,Powerstate FROM DeviceInventory WHERE SampleDate = '$TD' ORDER BY DeviceName"
$YData | Export-Csv -Path C:\Temp\YData.csv -NoTypeInformation
$TData | Export-Csv -Path C:\Temp\TData.csv -NoTypeInformation
$a=Import-CSV -Path C:\Temp\TData.csv
$b=Import-CSV -Path C:\Temp\YData.csv
Compare-Object -ReferenceObject ($a | Select-Object -Property 'DeviceName','PowerState') -DifferenceObject ($b | Select-Object -Property 'DeviceName','PowerState')
我也尝试从数组中挑出条目,但没有产生任何结果:
Compare-Object -ReferenceObject ($b | Where-Object {$_.DeviceName -eq 'Device B'}) -DifferenceObject ($a | Where-Object {$_.DeviceName -eq 'DeviceB'})
也尝试使用 SQL 数据(没有 CSV)
Compare-Object -ReferenceObject ($YData | Select-Object -Property 'DeviceName','PowerState' | Where-Object {$_.DeviceName -eq 'Device B'}) -DifferenceObject ($TData | Select-Object -Property 'DeviceName','PowerState' | Where-Object {$_.DeviceName -eq 'Device B'})
这是 CSV 中的设备 B,以证明它们不同:
PS C:\Windows\system32> $b | Where-Object {$_.DeviceName -eq 'Device B'}
DeviceName Powerstate
---------- ----------
Device B Powered Off
PS C:\Windows\system32> $a | Where-Object {$_.DeviceName -eq 'Device B'}
DeviceName Powerstate
---------- ----------
Device B Powered On
See image of the two tables here
First object in arrays a and b
谢谢!
【问题讨论】:
-
你已经写过代码了吗?如果是,请将其添加到您的初始帖子中。如果没有,这里提示您如何解决您的任务:Compare-Object /
Compare-Object -ReferenceObject ($Table1 | Select-Object -Property 'Device Name', 'PowerState') -DifferenceObject ($Table2 | Select-Object -Property 'Device Name', 'PowerState') -
@Patrick 我刚刚添加了我正在使用的代码,包括你给我的新比较对象。然而,这没有产生任何结果。我不确定我错过了什么。
-
您能否检查导入 csv 是否成功,因此变量
$a和$b不为空?你能上传一张$a[0]和$b[0]的输出图片吗? -
我在数组 a 和 b 中添加了第一个对象的图片。点击帖子底部的链接。我已经验证数组不为空。我已验证 CSV 不为空。
标签: arrays powershell csv datatables compare