Script Powershell para monitoramento do status da bateria e informações via blat (E-Mail)

1

Eu encontrei um script do Powershell neste post: Acionando tarefas e executando programas quando O Windows 7 está conectado ou desconectado?

O script é o seguinte:

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

Agora eu gostaria de alterar este script para que ele envie um e-mail usando a linha de comando E-Mail-Client blat que pode ser encontrada aqui: link Eu não me importo se haverá um e-mail para cada alteração ou apenas para quando ele foi conectado novamente ou foi desligado. Eu tentei fazer isso sozinho, mas meu conhecimento do Powershell termina aí. Eu tentei adicionar um comando "beep" após as três definições da variável $ Message para determinar se funcionaria dessa forma sem inundar nosso servidor de e-mail, mas não fez nada. Eu tentei adicionar o sinal sonoro também após o comando Write-Eventlog e após a variável $ Query, mas tudo não fez nada também. Caso contrário, quando eu estou adicionando o sinal sonoro nos últimos colchetes do script como:

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

Ele apitará o tempo todo, o que não ajudaria e inundaria o servidor de e-mail.

Então alguém pode me ajudar? É possível alterar este script de alguma forma, ele invocaria um comando como blat para enviar e-mails toda vez, o Power foi conectado ou desligado ou ambos?

Atenciosamente,

Kevin van Thiel

    
por Geco Mynx 25.10.2016 / 10:45

1 resposta

0

Eu já encontrei uma solução. Funcionou muito bem ao executar a partir do ISE, então eu tive que fazer um atalho e adicionado "PowerShell -noexit -f" na frente do caminho para o PowerShell-Script, então eu marquei a caixa de seleção "Executar como administrador". Depois disso, corre bem usando o atalho. O comando blat tem que estar na função como eu pensei:

...        
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) {
...

Depois disso, também fiz uma tarefa agendada que executa o script automaticamente no login do usuário e em segundo plano. Para a ação da tarefa agendada, você precisa fornecer o caminho para o PowerShell no Windows Directory. No campo de parâmetros opcionais, você deve adicionar o caminho ao script "PowerShell -noexit -f" na frente, assim como no atalho.

Depois de testar a visualização, ela se sai muito bem agora.

    
por 28.10.2016 / 09:01