🛠️ Server酱³ Windows 10 主机监控方案总结
2026年2月28日
这份总结涵盖了我们针对 Windows 10 LTSC 2019 环境下,利用 Server酱³ 实现无人值守主机监控的完整方案。
一、 核心环境配置
-
推送平台:Server酱³ (基于 SendKey 的极简推送)
-
系统环境:Windows 10 LTSC 2019
-
关键前置条件:
- TLS 1.2 强制开启:旧版 PowerShell 需在脚本中指定
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12。 - 执行策略修改:需运行
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser允许本地脚本运行。 - 编码格式:脚本必须保存为 UTF8-BOM 编码,否则中文字符会导致语法解析错误。
- TLS 1.2 强制开启:旧版 PowerShell 需在脚本中指定
二、 自动化脚本模版
所有脚本建议存放于 C:\Scripts\ 目录下。
1. 开机启动汇报 (ServerChan_Startup.ps1)
-
功能:开机自动推送,汇报设备名、启动时间及运行时长。
-
核心逻辑:
-
使用
Invoke-RestMethod的POST方法避开UrlEncode繁琐操作。 -
动态计算
uptime(持续运行时间)。
-
2. 关机/重启提醒 (ServerChan_Shutdown.ps1)
-
功能:在系统切断电源前发出最后通牒。
-
核心逻辑:
-
加入
-TimeoutSec 10,确保脚本不会无限期阻塞关机进程。 -
通过组策略触发,优先级高于普通后台程序。
-
三、 自动化触发部署
| 监控场景 | 部署工具 | 详细路径 / 设置 |
|---|---|---|
| 开机通知 | 任务计划程序 | 触发器: 当计算机启动时操作: powershell.exe -WindowStyle Hidden -File "路径" |
| 关机通知 | 组策略 (gpedit.msc) | 计算机配置 -> Windows设置 -> 脚本 -> 关机(必须在 PowerShell 脚本选项卡添加) |
| 登录报警 | 任务计划程序 | 触发器: 当任何用户登录时 |
-
四、进阶玩法构想
- 公网 IP 监控:每小时对比一次
ifconfig.me。 - RDP 安全审计:监控事件查看器 ID
4624。 - 磁盘预警:检测 C 盘剩余空间,低于 10% 时推送红色警告 Markdown。
- 硬件体检:利用
Get-WmiObject监控 CPU 温度或 SSD 剩余寿命。
- 公网 IP 监控:每小时对比一次
⚠️ 安全合规提醒(重要)
-
SendKey 保密:SendKey 是推送的唯一凭证,不可在代码托管平台(如 GitHub)公开。
-
密钥重置:若 SendKey 曾在交流中泄露,应立即在官网点击“重置 SendKey”并更新所有脚本。
# 1. 环境准备
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$OutputEncoding = [System.Text.Encoding]::UTF8
# 2. 配置信息 (记得替换为您重置后的新 Key)
$uid = "yourUID"
$sendkey = "yourSendkey"
$uri = "https://$uid.push.ft07.com/send/$sendkey.send"
# 3. 构造关机内容
$computerName = $env:COMPUTERNAME
$params = @{
title = "【$computerName】主机正在关机"
desp = "### 关机提醒`n" +
"- **设备名称**: $computerName`n" +
"- **关机时间**: $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')`n" +
"- **状态**: 脚本触发成功,正在切断电源。"
short = "主机正在关机..."
tags = "800G1USDT"
}
# 4. 执行推送
try {
# 关机脚本建议设置超时,防止卡住关机流程
Invoke-RestMethod -Uri $uri -Method Post -Body $params -TimeoutSec 10 -ErrorAction Stop
}
catch {
# 记录失败日志以便排查(可能是网络已断开)
$_.Exception.Message | Out-File -FilePath "C:\Scripts\shutdown_error.log" -Append
}
# 1. 环境准备:强制 TLS 1.2 并设置脚本编码支持
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$OutputEncoding = [System.Text.Encoding]::UTF8
#English test
# 2. 配置信息 (建议在测试成功后去官网重置一次 SendKey)
$uid = "yourUID"
$sendkey = "yourSendkey"
$uri = "https://$uid.push.ft07.com/send/$sendkey.send"
# 3. 获取一些有意义的系统信息
$computerName = $env:COMPUTERNAME
$uptime = (Get-Date) - (Get-CimInstance Win32_OperatingSystem).LastBootUpTime
$uptimeStr = "{0}天{1}小时{2}分钟" -f $uptime.Days, $uptime.Hours, $uptime.Minutes
# 4. 构造推送内容
$params = @{
title = "【$computerName】主机上线通知"
desp = "### 状态汇报`n" +
"- **设备名称**: $computerName`n" +
"- **系统时间**: $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')`n" +
"- **系统持续运行**: $uptimeStr`n" +
"- **网络状态**: 已连接到互联网"
short = "主机已上线,运行 $uptimeStr"
tags = "800G1USDT"
}
# 5. 执行推送
try {
Invoke-RestMethod -Uri $uri -Method Post -Body $params -ErrorAction Stop
}
catch {
# 生产环境通常不需要 Pause,但如果你想记录日志可以写到文件
$_.Exception.Message | Out-File -FilePath "C:\Scripts\push_error.log" -Append
}