🛠️ Server酱³ Windows 10 主机监控方案总结

这份总结涵盖了我们针对 Windows 10 LTSC 2019 环境下,利用 Server酱³ 实现无人值守主机监控的完整方案。

一、 核心环境配置

  • 推送平台Server酱³ (基于 SendKey 的极简推送)

  • 系统环境:Windows 10 LTSC 2019

  • 关键前置条件

    1. TLS 1.2 强制开启:旧版 PowerShell 需在脚本中指定 [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
    2. 执行策略修改:需运行 Set-ExecutionPolicy RemoteSigned -Scope CurrentUser 允许本地脚本运行。
    3. 编码格式:脚本必须保存为 UTF8-BOM 编码,否则中文字符会导致语法解析错误。

二、 自动化脚本模版

所有脚本建议存放于 C:\Scripts\ 目录下。

1. 开机启动汇报 (ServerChan_Startup.ps1)

  • 功能:开机自动推送,汇报设备名、启动时间及运行时长。

  • 核心逻辑

    • 使用 Invoke-RestMethodPOST 方法避开 UrlEncode 繁琐操作。

    • 动态计算 uptime(持续运行时间)。

2. 关机/重启提醒 (ServerChan_Shutdown.ps1)

  • 功能:在系统切断电源前发出最后通牒。

  • 核心逻辑

    • 加入 -TimeoutSec 10,确保脚本不会无限期阻塞关机进程。

    • 通过组策略触发,优先级高于普通后台程序。


三、 自动化触发部署

监控场景 部署工具 详细路径 / 设置
开机通知 任务计划程序 触发器: 当计算机启动时



操作: powershell.exe -WindowStyle Hidden -File "路径"
关机通知 组策略 (gpedit.msc) 计算机配置 -> Windows设置 -> 脚本 -> 关机



(必须在 PowerShell 脚本选项卡添加)
登录报警 任务计划程序 触发器: 当任何用户登录时

  • 四、进阶玩法构想

    1. 公网 IP 监控:每小时对比一次 ifconfig.me
    2. RDP 安全审计:监控事件查看器 ID 4624
    3. 磁盘预警:检测 C 盘剩余空间,低于 10% 时推送红色警告 Markdown。
    4. 硬件体检:利用 Get-WmiObject 监控 CPU 温度或 SSD 剩余寿命。

⚠️ 安全合规提醒(重要)

  • 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
}
← 返回 ↑ 回到顶部