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

基于用户名输入变量断开RDS用户会话的脚本问题

解决RDS多服务器环境下强制注销用户的问题

你的脚本核心问题出在Format-Wide这个Cmdlet上——它的作用是把数据转换成适合终端显示的格式化字符串,而不是保留原始的会话对象属性值。所以哪怕write-output $sid能显示出数字,本质上这个变量已经变成了格式化后的文本,不是Invoke-RDUserLogoff需要的原始数值类型,自然无法被识别。

下面是修正后的可行脚本,还考虑了一个用户可能同时在多台RDS服务器登录的场景:

# 导入RemoteDesktop模块
Import-Module RemoteDesktop

# 获取要注销的用户名
$user = Read-Host -Prompt 'Enter Username you want to disconnect'

# 获取该用户的所有RDS会话(保留原始对象,不做格式化处理)
$userSessions = Get-RDUserSession | Where-Object { $_.UserName -eq $user }

# 检查是否找到目标用户的会话
if (-not $userSessions) {
    Write-Host "No active sessions found for user: $user"
    exit
}

# 循环处理每个会话,逐一强制注销
foreach ($session in $userSessions) {
    try {
        Invoke-RDUserLogoff -HostServer $session.HostServer -UnifiedSessionID $session.UnifiedSessionID -Force
        Write-Host "Successfully logged off user $user from server $($session.HostServer) (Session ID: $($session.UnifiedSessionID))"
    }
    catch {
        Write-Host "Failed to log off user $user from server $($session.HostServer): $_"
    }
}

关键改进说明:

  • 直接保留Get-RDUserSession返回的原始会话对象,不再用Format-Wide提取属性——这样可以直接访问对象的HostServer和UnifiedSessionID原生属性,类型完全匹配Invoke-RDUserLogoff的要求。
  • 添加了会话存在性检查,避免找不到用户时执行无效命令。
  • 用循环遍历所有会话,支持用户同时登录多台RDS服务器的场景。
  • 增加了错误捕获逻辑,能直观反馈注销失败的原因。

你可以直接运行这个脚本,输入目标用户名后,它会自动遍历所有RDS服务器,注销该用户的所有活跃会话。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:47:08