Powershell 脚本用于监控电池状态并通过 blat(电子邮件)发送信息

Powershell 脚本用于监控电池状态并通过 blat(电子邮件)发送信息

我在这篇文章中找到了 Powershell 脚本: 在 Windows 7 插入或拔出电源时触发任务和运行程序?

脚本如下:

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 (;;) {}

现在我想修改这个脚本以便它将使用命令行电子邮件客户端 blat 发送电子邮件,可以在这里找到:http://www.blat.net/ 我不在乎每次更改是否会有电子邮件,或者只是在再次插入或拔出时。我尝试自己做,但我对 Powershell 的了解仅限于此。我尝试在变量 $Message 的 3 个定义后添加一个“嘟嘟”命令,以确定它是否能以这种方式工作而不会淹没我们的邮件服务器,但它什么也没做。我还尝试在 Write-Eventlog 命令和 $Query 变量后添加嘟嘟声,但它也什么也没做。否则,当我将嘟嘟声添加到脚本的最后一个括号中时,如下所示:

For (;;) {[console]::beep(500,500)}

它会一直发出哔哔声,但这没有帮助,而且会使邮件服务器瘫痪。

那么有人能帮助我吗?是否可以以某种方式更改此脚本,每次插入或拔出电源或两者时,它都会调用类似 blat 的命令来发送电子邮件?

亲切的问候,

凯文·范蒂尔

答案1

我已经找到了解决方案。从 ISE 运行时,它工作得很好,所以我必须创建一个快捷方式并在 PowerShell 脚本路径前面添加“PowerShell -noexit -f”,然后选中“以管理员身份运行”复选框。之后,使用快捷方式就可以正常运行。blat 命令必须像我所想的那样位于函数中:

...        
Function OnBatteryStatusChange ($NewStatus) {
      If ($NewStatus -eq 1) {
        $EventID = 5001
        $Message = "The computer was unplugged."
        blat.exe -subject "BatteryStatusMonitor" -from [email protected] (...)
      } ElseIf ($NewStatus -eq 2) {
...

之后,我还做了一个计划任务,在用户登录时和后台自动运行脚本。对于计划任务的操作,您必须为其提供 Windows 目录中 PowerShell 本身的路径。在可选参数字段中,您必须在前面添加脚本“PowerShell -noexit -f”的路径,就像在快捷方式中一样。

经过视图测试,现在这样效果很好。

相关内容