MsAnastasiia
@MsAnastasiia
Девочка.

Как сделать цикл в PowerShell с условием срабатывания?

Затея: Хочу сделать контроль температуры у компьютеров на Windows 11

function Get-Temperature {
    $t = Get-WmiObject MSAcpi_ThermalZoneTemperature -Namespace "root/wmi"
    $returntemp = @()

    foreach ($temp in $t.CurrentTemperature)
    {
    $cuTempKelvin = $temp / 10
    $cuTempCelsius = $cuTempKelvin - 273.15
    $returntemp += $cuTempCelsius.ToString() + " C "
    }
    return $returntemp
}


Всё бы ничего, но показывает постоянно 27.85. Истинная температура на момент измерения - 42

и второе, для PowerShell хочу сделать цикл, который бы срабатывал, который отслеживал превышение порохового значения и слал уведомление единожды. Если температура ниже порога - уведомление единожды. Если делаю do { if ...}, то такие уведомления сыпятся постоянно.
  • Вопрос задан
  • 71 просмотр
Решения вопроса 1
@MaxKozlov Куратор тега PowerShell
Если оно вам показывает при выводе не то, что на самом деле, значит оно не работает.
К сожалению, с температурными датчиками у МС не складывается.
А если таки заработает, или найдёте другой способ получения температуры,
то вы должны в цикле мониторить, записывать предыдущее значение в отдельную переменную и слать оповещение только когда следующее измерение перейдёт "порог" туда или обратно
типа
$border = 40
$prev_temp = Get-Temperature 
do {
  $cur_temp = Get-Temperature 
  if (
       ($cur_temp -lt $border -and $prev_temp -gt $border) -or
       ($cur_temp -gt $border -and $prev_temp -lt $border)
     )
  {
     Send-Notification $prev_temp $cur_temp
  }
  $prev_temp = $cur_temp
  Start-Sleep -Seconds 60
} while ($true)

Пример, естественно, для одного значения, а не массива
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы