1

В этом посте я обнаружил сценарий 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 (;;) {}

Теперь я хотел бы изменить этот скрипт, чтобы он отправлял E-Mail с помощью командной строки. E-Mail-Client blat, который можно найти здесь: http://www.blat.net/ Мне все равно, есть ли будет электронной почтой для каждого изменения или только для того, когда оно было подключено снова ИЛИ было отключено. Я пытался сделать это сам, но мои знания о Powershell на этом заканчиваются. Я попытался добавить команду "beep" после 3-х определений переменной $ Message, чтобы определить, будет ли она работать таким образом, не заполняя наш почтовый сервер, но ничего не сделал. Я пытался добавить звуковой сигнал также после команды Write-Eventlog и после переменной $ Query, но это тоже ничего не дало. В противном случае, когда я добавляю звуковой сигнал в последние скобки скрипта, например:

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

Он будет издавать звуковой сигнал все время, который не поможет, и затопит почтовый сервер.

Так может кто-нибудь мне помочь? Можно ли каким-то образом изменить этот скрипт, он будет вызывать команду типа blat для отправки электронной почты каждый раз, когда Power будет подключен или отключен, или и то, и другое?

С уважением,

Кевин ван Тиль

1 ответ1

0

Я уже нашел решение. Это работало просто отлично при запуске из ISE, поэтому мне пришлось сделать ярлык и добавить «PowerShell -noexit -f» перед путем к PowerShell-Script, а затем я установил флажок "Запуск от имени администратора". После этого он работает просто отлично с помощью ярлыка. Команда blat должна быть в функции, как я и думал:

...        
Function OnBatteryStatusChange ($NewStatus) {
      If ($NewStatus -eq 1) {
        $EventID = 5001
        $Message = "The computer was unplugged."
        blat.exe -subject "BatteryStatusMonitor" -from noreply-batterystatusmonitor@domain.de (...)
      } ElseIf ($NewStatus -eq 2) {
...

После этого я также выполнил запланированное задание, которое автоматически запускает сценарий при входе пользователя и в фоновом режиме. Для действия запланированной задачи вы должны указать ей путь к самой PowerShell в каталоге Windows. В поле необязательных параметров необходимо добавить путь к сценарию «PowerShell -noexit -f» в начале, как в ярлыке.

После тестов просмотра, теперь это очень хорошо.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .