PowerShell创建Active Directory用户时设置Remote Desktop Services权限报错
问题原因
你遇到的报错本质是两个问题:
dsquery返回的用户DN自带双引号和多余的换行/空白字符,直接拼接LDAP路径会导致[ADSI]绑定对象无效,触发「服务器未运行」类的连通性报错- 用
InvokeSet操作终端服务属性属于旧版兼容方案,依赖本地Terminal Services服务运行,且属性名匹配规则严格,容易触发参数未指定报错
解决方案
无需使用InvokeSet,直接修改AD用户原生的终端服务属性即可,两种实现方式如下:
方式1:保留ADSI实现(无需额外安装模块)
# 清理dsquery返回的DN格式,移除引号和空白字符 $userpath = (dsquery user -samid $username).Trim('"').Trim() $userp = [ADSI]"LDAP://$userpath" # 设置远程控制权限:值2代表允许远程控制无需用户确认 $userp.msTSAllowRemoteControl = 2 # 设置终端服务用户配置路径 $userp.msTSProfilePath = "\\documentsf\profiles\$username" # 保存所有修改 $userp.SetInfo()
方式2:使用AD模块实现(更稳定,推荐)
如果已安装RSAT工具的ActiveDirectory模块,代码更简洁不易出错:
Set-ADUser -Identity $username -Replace @{ msTSAllowRemoteControl = 2 msTSProfilePath = "\\documentsf\profiles\$username" }
注意事项
- 运行脚本的账号需要持有目标OU的用户属性修改权限
- 域功能级别需为Windows Server 2003及以上,支持msTS前缀的终端服务属性
内容的提问来源于stack exchange,提问作者user16603959
相关产品推荐
相关产品推荐

