У меня есть две таблицы, в которых мне нужно сравнить разницу между сегодняшним значением и вчерашним значением и сказать, что изменилось. Примечание. Я использовал «Сегодня» и «Вчера» вместо дат в двух таблицах в изображении, но фактические таблицы имеют даты.
Мне нужен сценарий Powershell, который будет принимать DeviceName и PowerState и сообщать мнекоторый изменился между вчера и сегодня. В этом примере мне нужно только сообщить мне изменение со вчерашнего дня на сегодняшнее: «Устройство B выключено». Затем я буду запускать этот скрипт ежедневно, чтобы отправить электронное письмо моей команде. Сценарий также должен сообщить мне, было ли устройство включено со вчерашнего дня до сегодняшнего дня.
Данные в SQL, в PowerShell, я извлек данные из SQL и в два отдельных CSV, затем импортировал каждый CSV вдва отдельных массива. Я думаю о цикле ForEach, чтобы пройти через каждое имя устройства, но я застрял там.
Вот сценарий, который я использую. (Run-Query - это функция в модуле, который я загружаю). Имя сервера было изменено на «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'})
Вот устройство B из CSV для доказательства того, что они разные:
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
См. изображение двухтаблицы здесь
Первый объект в массивах a и b
Спасибо!