1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- $logFile = "C:\LOG\onShutdown_PS.log"
- $mosquittoPubPath = "c:\Tools\mosquitto\mosquitto_pub.exe"
- $mqttHost = "mqtt.lan"
- $mqttStatTopic = "MediaPC/ShutdownEvent"
- $mqttTopicOnShutdown = "cmnd/TasmotaMediaPC/event"
- $mqttPayloadOnShutdown = "delayedOff"
- $scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
- $mosquittoPubUserPassword = ""
- if($mqttUser -and $mqttPwd -and $mqttUser -ne "" -and $mqttPwd -ne "") {
- $mosquittoPubUserPassword = "-u $mqttUser -P $mqttPwd "
- }
- $logDate = "{0:yyyy-MM-dd HH:mm:ss}" -f (Get-Date)
- if($logFile) { Write-Output $logDate >> $logFile }
- Get-WinEvent -FilterHashtable @{logname='System'; id=1074} -MaxEvents 1 | ForEach-Object {
- $ts_event = [datetime]$_.TimeCreated
- $ts_delta = (New-TimeSpan -Start $ts_event).TotalSeconds
- $ts_str = $ts_delta.ToString("#")
- $command = $_.Properties[4].Value
-
- if($logFile) { Write-Output " last shutdown-event was '$command', $ts_str s ago" >> $logFile }
- if($ts_delta -lt 15) {
- if($logFile) { Write-Output " ==> OK, publish MQTT messages." >> $logFile }
- if($command -eq "power off") {
- $cmdLine = "$mosquittoPubPath -h $mqttHost $mosquittoPubUserPassword-t $mqttStatTopic -m SHUTDOWN"
- Invoke-Expression $cmdLine
- if($mqttTopicOnShutdown -and $mqttTopicOnShutdown -ne "") {
- $cmdLine = "$mosquittoPubPath -h $mqttHost $mosquittoPubUserPassword-t $mqttTopicOnShutdown -m $mqttPayloadOnShutdown"
- Invoke-Expression $cmdLine
- }
- }
- elseif($command -eq "restart") {
- $cmdLine = "$mosquittoPubPath -h $mqttHost $mosquittoPubUserPassword-t $mqttStatTopic -m RESTART"
- Invoke-Expression $cmdLine
- if($mqttTopicOnRestart -and $mqttTopicOnRestart -ne "") {
- $cmdLine = "$mosquittoPubPath -h $mqttHost $mosquittoPubUserPassword-t $mqttTopicOnRestart -m $mqttPayloadOnRestart"
- Invoke-Expression $cmdLine
- }
- }
- }
- else {
- if($logFile) { Write-Output " ==> too old. Nothing to do." >> $logFile }
- }
- }
|