Windwos在线通知
前言
得益于之前折腾过Lucky内网穿透,我能够远程到内网主机上实现远程开发。而又因为之前折腾过WOL网络唤醒,再加上买了一个边缘盒子OES,家庭服务可以24小时运行,我能够远程控制主机(开机/关机/重启/休眠),实现按需启动。
当我在外时,只用一个低配轻薄笔记本也能实现重任务的开发工作,因为是中心工作站,可以保持统一的开发环境,工作本无需安装开发环境,能联网即可。但是随之而来有个小问题,经常会在断开远程连接后忘记了关闭远程主机,导致可能白白运行十多个小时。因此,就想实现主机在线通知。
原理
在 iOS 上最简单的消息通知方就用 Bark,由于通知消息不涉及敏感内容,因此使用公共服务器即可。
触发方式也简单,利用 Windows 的任务计划程序,搭配Powershell脚本即可。
实操
iOS
在 AppStore 搜索Bark应用并安装,打开后首页会看到类似https://api.day.app/xxxxxxxxxxxxx的地址,记录下来。
Windows
按下Win+S打开搜索输入任务计划程序,会打开面板,点击面板右侧创建基本任务。
- 创建基本任务:输入名称和描述。
- 触发器:选择
计算机启动时。 - 操作:选择
启动程序,接着按下Win+R输入cmd执行where powershell查找PowerShell程序的位置,会看到如C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe,将这个地址填入程序或脚本都输入框中,添加参数输入框中填-WindowStyle Hidden -Command "$u=(Get-Date)-(Get-CimInstance Win32_OperatingSystem).LastBootUpTime; $h=[math]::Floor($u.TotalHours); $m=$u.Minutes; $msg='已运行:'+$h+'小时'+$m+'分钟'; Invoke-RestMethod -Uri ('https://api.day.app/xxxxxxxxxxxxx/B560M主机在线通知/'+$msg)"。 - 完成:点击
完成即可。
接着找到刚刚创建好的任务,右键点击属性:
- 常规:确保勾选
不关用户是否登录都要运行、不存储密码。 - 触发器-编辑:确保开始任务是
启动时。高级设置下延迟任务时间可以选择最小时间,注意不是只能用下拉框中的时间,可以手动编辑如5秒、重复任务间隔一样可以手动编辑如4小时、持续时间选择无期限。确保已启用是勾选状态。 - 条件:确保只勾选了只有在以下网络连接时才启动,并选择
任何连接。 - 设置:推荐勾选这些允许按需运行任务、如果过了计划开始时间,立即启动任务、如果任务执行失败,按以下频率重新启动,确保能够手动执行、一定执行、失败重试。
效果
当 Windows 启动后时,会在延迟 5 秒后执行一次消息通知,并且在每隔 4 小时执行一次。
提示
触发器和条件的区别
一开始可能会有点疑惑,为什么有了触发器还需要条件?
其实触发器规定了计划任务在什么时候触发,但触发并不代表一定会执行。到底会不会执行需要看条件。这里我们设置了一个条件是,当连接到任务网络的时候才可以触发。因为这个脚本中需要发送 HTTP 请求,所以必须要网络。如果再触发时发现断网了,那么这个脚本就不会被执行,因为执行了也肯定会失败。
如果是其他无需网络的任务,则可以把条件去掉,只要触发了就会执行。
