本来想做一个小程序开机启动,然后进行消息推送到手机,但是经过大佬的点拨,搞个脚本不就行了吗,占用资源还少,一想也是,然后就试着去搞了一下。以下是测试结果:

  1. 准备wxpusher Token和用户uids,目前wxpusher已经无法微信消息推送,需要安装wxpusherApp,用了很久了很为稳定,并且已经开源
  2. C盘建立Scripts文件夹
  3. 创建脚本 ,保存文件名称push_on_startup.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# 日志路径
$logPath = "C:\Scripts\push_log.txt"

function Write-Log($msg) {
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$logLine = "[$timestamp] $msg`r`n"
# 使用 .NET 原生 API 强制以 UTF-8 无 BOM 追加写入,彻底解决文件乱码
[System.IO.File]::AppendAllText($logPath, $logLine, [System.Text.Encoding]::UTF8)
}

Write-Log "开机脚本已启动,开始等待网络连接..."

# 最多等待 180 秒(60 次 x 3 秒)
$maxRetry = 60
$connected = $false

for ($i = 0; $i -lt $maxRetry; $i++) {
try {
$ping = Test-Connection -ComputerName "223.5.5.5" -Count 1 -Quiet -ErrorAction SilentlyContinue
if ($ping) {
$connected = $true
break
}
} catch {}
Start-Sleep -Seconds 3
}

if ($connected) {
Write-Log "网络已连接,开始发送 WxPusher 消息..."

# 1. API 地址
$url = "https://wxpusher.zjiecode.com/api/send/message"

# 2. 构建 JSON Payload (替换为你的真实 appToken 和 uids)
$payload = @{
appToken = "AT_XXX" # 填入你的 appToken
content = "The work computer is turned on。"
contentType = 1 # 1 表示文本类型
uids = @("UID_XXX") # 填入你的 UID 数组
} | ConvertTo-Json -Compress

try {
# 3. 使用 .NET WebClient 直接读取 UTF-8 原始字节,彻底防止响应内容解码错误
$wc = New-Object System.Net.WebClient
$wc.Headers["Content-Type"] = "application/json; charset=utf-8"

$byteData = [System.Text.Encoding]::UTF8.GetBytes($payload)
$responseBytes = $wc.UploadData($url, "POST", $byteData)

# 强制将返回的字节流按 UTF-8 解码为文本
$jsonResponse = [System.Text.Encoding]::UTF8.GetString($responseBytes)

Write-Log "消息推送成功: $jsonResponse"
} catch {
Write-Log "消息推送失败: $_"
}
} else {
Write-Log "等待网络超时,放弃推送。"
}
  1. 创建操作系统计划任务
    • 按下 Win + R 键,输入 taskschd.msc 回车,打开 任务计划程序

    • 在右侧点击 创建任务...(注意:不要选“创建基本任务”)。

    • 常规设置

      • 名称:WxPusher 开机联网通知
      • 选择 “不管用户是否登录都要运行” 或 “只在用户登录时运行”(建议选“只在用户登录时运行”,省去配置密码的麻烦)。
      • 勾选 “使用最高权限运行”。
    • 触发器设置(核心步骤)

      • 切换到 “触发器” 选项卡。
      • 点击 “新建”:开始任务:改为选择 “登录时”(或者 “启动时”);勾选 “延迟任务时间”:选择或直接手动输入 5 秒;点击确定。
    • 操作设置

      • 点击 新建(N)...:
      • 操作:选择 启动程序。
      • 程序或脚本:输入 powershell.exe
      • 添加参数(可选):-ExecutionPolicy Bypass -WindowStyle Hidden -File "C:\Scripts\push_on_startup.ps1"
    • 条件设置

      • 切换到 “条件” 选项卡
      • 取消勾选 “只有在计算机使用交流电源时才启动”(如果是笔记本)。
      • 取消勾选 “只有在以下网络连接可用时才启动”(因为联网等待逻辑已经写在 PowerShell 脚本内部了,交给脚本处理更稳定)。
    • 设置

      • 切换到 “设置” 选项卡
      • 勾选 “如果失败,按以下频率重新尝试”:1 分钟,尝试次数 3
    • 点击 确定 保存

    • 测试脚本:设置完成后,可以在任务计划程序列表中找到 WxPusher 开机联网通知,右键点击 运行。如果APP收到了推送,且 C:\Scripts\push_log.txt 中生成了日志,就说明一切配置妥当了