我在这篇文章中找到了 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”的路径,就像在快捷方式中一样。
经过视图测试,现在这样效果很好。