Get-RDUserSession命令在Windows任务计划程序中运行失败问题咨询
问题核心原因
- PowerShell架构不匹配:Remote Desktop Service 相关的PowerShell模块仅在64位版本的PowerShell中预装,若任务计划程序调用的是
SysWOW64目录下的32位PowerShell,无法正常加载模块读取RDS部署信息,就会触发该报错。 - 非交互式环境未自动加载模块:任务计划程序的非交互式运行上下文不会自动加载
RemoteDesktop模块,导致cmdlet调用异常。 - 会话0权限限制:如果任务计划配置为「不管用户是否登录都要运行」,任务会在0号非交互会话中执行,RDS模块的部分权限校验逻辑无法在会话0中正常读取部署配置,即使授予管理员最高权限也会报错。
修复方案
指定64位PowerShell运行路径
在任务计划的「操作」配置页,不要直接填写powershell.exe作为启动程序,明确指定64位PowerShell的完整路径:C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
注意不要选择C:\Windows\SysWOW64\路径下的32位版本。脚本开头显式导入RDS模块
在调用Get-RDUserSession之前,先添加模块导入代码,强制加载64位版本的RDS模块:
Import-Module RemoteDesktop -Force # 如仍报错可使用完整路径加载 # Import-Module "C:\Windows\System32\WindowsPowerShell\v1.0\Modules\RemoteDesktop\RemoteDesktop.psd1" -Force
调整任务运行配置
将任务计划的运行选项从「不管用户是否登录都要运行」改为「只在用户登录时运行」,保持「使用最高权限运行」的勾选,同时确认运行任务的账户拥有RDS部署管理员权限。正确指定连接Broker参数
调用Get-RDUserSession时明确传入连接Broker的完整FQDN:
$id = Get-RDUserSession -ConnectionBroker "OurServer.OurDomain.com"
备选方案(无需依赖RDS模块)
如果确实需要配置为后台不登录运行,可以改用原生命令读取RDS会话信息,避免模块加载问题:
- 使用
quser命令解析输出 - 使用CIM调用获取会话信息:
Get-CimInstance -ClassName Win32_LogonSession -Filter "LogonType = 10"
内容的提问来源于stack exchange,提问作者A. Guattery
相关产品推荐
相关产品推荐

