|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Разное - [решено] Событие и код перехода на питание от батареи |
|
|
Разное - [решено] Событие и код перехода на питание от батареи
|
Пользователь Сообщения: 114 |
Профиль | Отправить PM | Цитировать Здравствуйте! Есть одна задумка. Хочу создать определённые задания в планировщике задач, которые бы запускались при переходе на питание от батареи. Не могу определить тригер для этого. То есть запуск задачи при событии, а вот журнал, источник и код события не могу найти. Бродил на TechNet, но ничего подходящего не смог найти. Может быть есть какой-то альтернативный вариант, то есть запуск задания по какому-то другому условию, которое в свою очередь всегда выполняется системой при переходе на питание от батареи?
|
|
Отправлено: 08:57, 21-06-2015 |
Сообщения: 25152
|
Профиль | Сайт | Отправить PM | Цитировать Говорят, что Windows не пишет в журнал событие подключения/отключения питания, предлагают писать его при помощи PS:
New-EventLog -Source BatteryStatusMonitor -LogName Application Function OnBatteryStatusChange ($NewStatus) { If ($NewStatus -eq 1) { $EventID = 5001 $Message = "The computer was unplugged." } ElseIf ($NewStatus -eq 2) { $EventID = 5002 $Message = "The computer was plugged in." } Else { $EventID = 5000 $Message = "Battery status changed to $NewStatus" } Write-EventLog -LogName Application -Source BatteryStatusMonitor -EventID $EventID -Message $Message } $Query = "select * from __instancemodificationevent within 3 where targetinstance isa 'win32_battery' and targetinstance.batterystatus <> previousinstance.batterystatus" Register-WmiEvent -Query $Query -Action {OnBatteryStatusChange $Event.SourceEventArgs.NewEvent.TargetInstance.BatteryStatus} -SourceIdentifier "BatteryStatusChange" For (;;) {} Источник: http://superuser.com/a/389853 |
------- Отправлено: 09:36, 21-06-2015 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 114
|
Профиль | Отправить PM | Цитировать а как с помощью этого скрипта добавить журналирование?
|
Отправлено: 10:21, 21-06-2015 | #3 |
Сообщения: 25152
|
Профиль | Сайт | Отправить PM | Цитировать n_i_x, сохранить его как .ps1 и запустить, полагаю. Для ежедневного использования поместить в автозапуск или лучше в планировщик. Потом смотрите события в журнале Приложение - найдите событие с кодом 5001 и источником BatteryStatusMonitor - по правой кнопке мыши на нем - Привязать задачу к событию...
На GitHub есть другой скрипт, который основан на этом: Get and Log Battery and Power Levels using Powershell Правда он развесистый и мониторит не только подключение/отключение, при желании можете его отредактировать под себя, благо он с комментариями. Попробуйте, расскажите как и что #Battery Monitor Script 0.2 # based on http://www.rivnet.ro/2010/05/log-battery-and-power-levels-using-powershell.html #------------------------------- # You can modify the following settings to fit your needs # Check interval to detect power changes $checkInterval = 1 # Log interval in seconds when on battery power. $batteryLogInterval = 60 # Log interval in seconds when on AC power. $acLogInterval = 3600 # Log warning instead of info if battery power below given percentage $batteryLogWarn = 15 #------------------------------- #create custom event-log if it doesn't exist already $condition = ((get-wmiobject -class "Win32_NTEventlogFile" | where {$_.LogFileName -like 'BatteryMonitor'} | measure-object ).count -eq '0') if($condition) { 'create event log' New-EventLog -Source BattMon -LogName BatteryMonitor } #signal script execution start Write-EventLog -LogName BatteryMonitor -Source BattMon -EventID 0 -Message 'Starting new Execution of BatteryCharge Monitor Script' -EntryType Information -ComputerName $env:computername -ErrorAction:SilentlyContinue $prevBatteryStatus = 2 $prevLogTime = 0 do { #clear any previous values $PowstatMsg = $null $ChargeRemMsg = $null $ChargeRem = $null $RemTimeMsg = $null #create a Message object that we can add values to $Message = '' $Message = $Message | select-object *,PowStatMsg,ChargeRemMsg,RemTimeMsg $batt = Get-WmiObject -Class Win32_Battery #1 means on battery, 2 on ac power If ($batt.BatteryStatus -like '1') { $Message.PowstatMsg = 'On_Battery' 'PowerStatus: On_Battery' } elseif ($batt.BatteryStatus -like '2') { $Message.PowstatMsg = 'AC_Power' 'PowerStatus: AC_Power' } #If charge is larger than 100, it means it is full/on ac power if ($batt.EstimatedChargeRemaining -lt '100') { 'EstimatedChargeRemaining: ' + $batt.EstimatedChargeRemaining + '%' $Message.ChargeRemMsg = "{0:P0}" -f ($batt.EstimatedChargeRemaining/100) $ChargeRem = $batt.EstimatedChargeRemaining } else { 'EstimatedChargeRemaining: 100%' $Message.ChargeRemMsg = "{0:P0}" -f 1 $ChargeRem = 100 } #If estimated minutes is an absurdly high value, it means we are on AC power if ($batt.EstimatedRUntime -lt '9999') { 'EstimatedRunTime: ' + $batt.EstimatedRunTime + 'min' $Message.RemTimeMsg = $batt.EstimatedRunTime } else { $Message.RemTimeMsg = 'N/A' } If ($batt.BatteryStatus -ne $prevBatteryStatus) { if ($prevBatteryStatus -like '2') { $EventMsg = "Switched to Battery Power! $($Message.ChargeRemMsg), Minutes: $($Message.RemTimeMsg)" } else { $EventMsg = "Switched back to AC Power! $($Message.ChargeRemMsg), Minutes: $($Message.RemTimeMsg)" } Write-EventLog -LogName BatteryMonitor -Source BattMon -EventID 10 -Message $EventMsg -EntryType Warning -ComputerName $env:computername -ErrorAction:SilentlyContinue $prevLogTime = New-TimeSpan "01 January 1970 00:00:00" $(Get-Date) } $prevBatteryStatus = $batt.BatteryStatus $currLogTime = New-TimeSpan "01 January 1970 00:00:00" $(Get-Date) $diff = $currLogTime.TotalSeconds - $prevLogTime.TotalSeconds if ($prevBatteryStatus -like '2') { #AC Power if ($diff -ge $acLogInterval) { $EventMsg = "$($Message.PowStatMsg), $($Message.ChargeRemMsg), $($Message.RemTimeMsg)" Write-EventLog -LogName BatteryMonitor -Source BattMon -EventID 100 -Message $EventMsg -EntryType Information -ComputerName $env:computername -ErrorAction:SilentlyContinue $prevLogTime = New-TimeSpan "01 January 1970 00:00:00" $(Get-Date) } } elseif ($prevBatteryStatus -like '1') { # Battery power if ($diff -ge $batteryLogInterval) { $EventMsg = "$($Message.PowStatMsg), $($Message.ChargeRemMsg), $($Message.RemTimeMsg)" if ($ChargeRem -le $batteryLogWarn) { Write-EventLog -LogName BatteryMonitor -Source BattMon -EventID 200 -Message $EventMsg -EntryType Warning -ComputerName $env:computername -ErrorAction:SilentlyContinue } else { Write-EventLog -LogName BatteryMonitor -Source BattMon -EventID 200 -Message $EventMsg -EntryType Information -ComputerName $env:computername -ErrorAction:SilentlyContinue } $prevLogTime = New-TimeSpan "01 January 1970 00:00:00" $(Get-Date) } } Sleep $checkInterval } while (1) |
------- Отправлено: 10:44, 21-06-2015 | #4 |
Пользователь Сообщения: 114
|
Профиль | Отправить PM | Цитировать первый скрипт запустился, и работал нормально до перезагрузки, после не работает, так как не может зарегистрировать себя в журнале, ругается на то, что такое уже существует. второй работает, но слегка чудит с логами)
если выдернуть шнур то кидает сообщение, о том что переключено питание на батарею, если воткнуть шнур обратно, то выдаёт что переключен на питание от батареи или на питание от сети, всегда по разному, но номер события один и тот же 10)) |
|
Отправлено: 12:08, 21-06-2015 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Blast:
Цитата n_i_x:
|
||
Отправлено: 12:14, 21-06-2015 | #6 |
Сообщения: 25152
|
Профиль | Сайт | Отправить PM | Цитировать Цитата n_i_x:
Цитата n_i_x:
Цитата Iska:
|
|||
------- Отправлено: 12:48, 21-06-2015 | #7 |
Пользователь Сообщения: 114
|
Профиль | Отправить PM | Цитировать да запускаю именно так.
а во втором 2 одинаковых кода на разные события If ($batt.BatteryStatus -ne $prevBatteryStatus) { if ($prevBatteryStatus -like '2') { $EventMsg = "Switched to Battery Power! $($Message.ChargeRemMsg), Minutes: $($Message.RemTimeMsg)" } else { $EventMsg = "Switched back to AC Power! $($Message.ChargeRemMsg), Minutes: $($Message.RemTimeMsg)" } Write-EventLog -LogName BatteryMonitor -Source BattMon -EventID 10 -Message $EventMsg -EntryType Warning -ComputerName $env:computername -ErrorAction:SilentlyContinue |
Отправлено: 13:40, 21-06-2015 | #8 |
Сообщения: 25152
|
Профиль | Сайт | Отправить PM | Цитировать Цитата n_i_x:
$condition = ((get-wmiobject -class "Win32_NTEventlogFile" | where {$_.LogFileName -like 'Application'} | measure-object ).count -eq '0') if($condition) { 'create event log' New-EventLog -Source BatteryStatusMonitor -LogName Application } Function OnBatteryStatusChange ($NewStatus) { If ($NewStatus -eq 1) { $EventID = 5001 $Message = "The computer was unplugged." } ElseIf ($NewStatus -eq 2) { $EventID = 5002 $Message = "The computer was plugged in." } Else { $EventID = 5000 $Message = "Battery status changed to $NewStatus" } Write-EventLog -LogName Application -Source BatteryStatusMonitor -EventID $EventID -Message $Message } $Query = "select * from __instancemodificationevent within 3 where targetinstance isa 'win32_battery' and targetinstance.batterystatus <> previousinstance.batterystatus" Register-WmiEvent -Query $Query -Action {OnBatteryStatusChange $Event.SourceEventArgs.NewEvent.TargetInstance.BatteryStatus} -SourceIdentifier "BatteryStatusChange" For (;;) {} Цитата n_i_x:
Первый я проверял, все нормально работает, в том числе и через планировщик скрывая окно PS. События регистрируются, поставленная вами задача выполняется, что еще надо? |
||
------- Отправлено: 14:10, 21-06-2015 | #9 |
Пользователь Сообщения: 114
|
Профиль | Отправить PM | Цитировать 1 вариант простой и более подходящий, но когда этот скрипт активен, то нагрузка на систему возрастает сильно, аж вентилятор сильней крутится начинает)
остановился на 2 варианте, пытаюсь в нём разобраться сейчас, как разделить сообщение с одинаковыми кодами, но разными событиями |
Отправлено: 15:13, 21-06-2015 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Напряжение на контактах, идущих от батареи | buzanovn | Ноутбуки | 10 | 26-06-2018 13:09 | |
Падает яркость на ноутбуке при работе от батареи | Leeaka0ne | Хочу все знать | 5 | 12-01-2015 06:15 | |
2008 R2 - [решено] Может кому поможет. Встретил проблему Решил Код события 47 Событие WHEA-logger | bad-us | Windows Server 2008/2008 R2 | 5 | 21-10-2014 12:05 | |
Ноут включается только от батареи, от сети без батареи не хочет | stranges | Непонятные проблемы с Железом | 5 | 06-09-2011 13:37 | |
Событие 1030 от USERENV | flower | Microsoft Windows NT/2000/2003 | 7 | 09-12-2009 14:01 |
|