Уведомление о низком заряде батареи ноутбука — PowerShell
Есть у меня в коллекции скрипт, который отсылает уведомления о низком заряде батареи. Раньше я использовал его для Windows 7 и удаленного уведомления, а сейчас решил использовать возможности Windows 10.
Скрипт имеет конфигурационный файл, в котором указывается голосовое сообщение, порог срабатывания и время задержки цикла. В процессе уведомления справа выводится сообщение и звучит голос.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 Created on: 04.11.2020 17:56 Created by: kanitelka Organization: flammlin.com Filename: =========================================================================== .DESCRIPTION A description of the file. #> $Dir = Get-Location function New-Config { $Config = @{ <# Settings #> 'ConfigBalloonTipText' = "Battery is low, connect to charging." 'ConfigSpeakText' = "Hey guy, Hey girl, I will run out soon" 'ConfigBatteryPersent' = "25" 'ConfigStartSleep' = "120" } $Config | Export-Clixml -Path "$Dir\config.cfg" Import-Config } function Import-Config { if (Test-Path -Path "$Dir\config.cfg") { try { $Config = Import-Clixml -Path "$Dir\config.cfg" $global:ConfigBalloonTipText = $Config.ConfigBalloonTipText $global:ConfigSpeakText = $Config.ConfigSpeakText $global:ConfigBatteryPersent = $Config.ConfigBatteryPersent $global:ConfigStartSleep = $Config.ConfigStartSleep } catch { New-Config } } else { New-Config } } $bat = $(Get-WmiObject win32_battery).estimatedChargeRemaining Import-Config While ($true) { if ($bat -cle $global:ConfigBatteryPersent) { Add-Type -AssemblyName System.Windows.Forms $global:balmsg = New-Object System.Windows.Forms.NotifyIcon $path = (Get-Process -id $pid).Path $balmsg.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon($path) $balmsg.BalloonTipIcon = [System.Windows.Forms.ToolTipIcon]::Warning $balmsg.BalloonTipText = $global:ConfigBalloonTipText $balmsg.BalloonTipTitle = "Внимание $Env:USERNAME !!!" $balmsg.Visible = $true $balmsg.ShowBalloonTip(10000) Add-Type -AssemblyName System.Speech $SpeechSynthesizer = New-Object -TypeName System.Speech.Synthesis.SpeechSynthesizer $SpeechSynthesizer.Speak($global:ConfigSpeakText) } Start-Sleep -Seconds $global:ConfigStartSleep } |
Если конфигурационный файл отсутствует, то он создается автоматом при запуске скрипта. Настройки в файл можно внести любым удобным редактором.
По умолчанию:
Низкий заряд = 25 %
Задержка = 120 секунд
В Windows есть встроенное напоминание о необходимости подключиться к зарядному устройству, но на сколько я знаю, срабатывает оно единожды, а данный скрипт будет напоминать пока действителен цикл.