You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PowerShell筛选服务器活跃用户并发送消息?

筛选服务器活跃用户并发送消息的正确实现

由于服务器安全限制无法使用msg *批量发送消息,需要通过query user /server:$SERVER筛选出活跃用户后单独发送。你提供的原始代码存在一个问题:直接匹配"Active"拿到的是整行会话信息,而msg命令需要的是纯用户名,直接传入整行会导致命令执行失败。

修正后的实现代码

# 获取目标服务器的用户会话,跳过表头行并筛选活跃状态的会话
$Session_Users = query user /server:$SERVER | Select-Object -Skip 1 | Where-Object { $_ -match "Active" }

# 从活跃会话行中提取纯用户名
$Active_Usernames = $Session_Users | ForEach-Object {
    # 按连续空格分割行内容,取第一个非空字段作为用户名
    ($_ -split '\s+')[0]
}

# 给每个活跃用户发送消息
$TheMessage = "X"
foreach ($user in $Active_Usernames) {
    & msg $user /v /Time:120 $TheMessage
}

关键说明

  • Select-Object -Skip 1:跳过query user输出的表头行(第一行),避免把表头误识别为用户信息。
  • ($_ -split '\s+')[0]:query user的输出用连续空格分隔字段,第一个字段就是用户名,通过正则分割后提取即可。
  • 先提取用户名再执行msg命令,确保传入的参数符合命令要求,避免执行报错。

内容的提问来源于stack exchange,提问作者vfdsabvdasvd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 12:25:24