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

修改远程桌面服务主目录PowerShell脚本异常问题求助

解决AD用户RDS主目录路径变量引用错误的问题

这是PowerShell字符串变量解析的典型小坑——你在拼接路径时没正确处理对象属性的引用,导致脚本把整个AD用户对象转换成了可分辨名称(DistinguishedName),再生硬加上.SamAccountName后缀,才出现了那个不符合预期的奇怪路径。

问题根源

在双引号字符串中,直接写$_.SamAccountName时,PowerShell会先把$_(当前遍历的AD用户对象)默认转换成字符串(也就是用户的DistinguishedName),再拼接.SamAccountName,最终路径就变成了\\SERVERNAME\ts-CN=Testuser,OU=Test,...SamAccountName,完全偏离了你的需求。

修正后的ADSI版本脚本

只需要用子表达式$()包裹属性引用,确保PowerShell正确解析SamAccountName的实际值:

Get-ADUser -Filter * -SearchBase 'OU=Test,OU=Users,DC=contoso,DC=com' | ForEach-Object {
    $user = [ADSI]"LDAP://$($_.DistinguishedName)"
    $user.psbase.InvokeSet("TerminalServicesHomeDirectory", "\\SERVERNAME\ts-$($_.SamAccountName)")
    $user.SetInfo()
}

更简洁的推荐方案

其实不用借助ADSI这么繁琐,直接用Set-ADUser cmdlet就能完成操作,代码更简洁也更贴合PowerShell的最佳实践:

Get-ADUser -Filter * -SearchBase 'OU=Test,OU=Users,DC=contoso,DC=com' | 
    Set-ADUser -TerminalServicesHomeDirectory {"\\SERVERNAME\ts-$($_.SamAccountName)"}

这里用脚本块作为参数值,动态为每个用户生成对应的主目录路径,同样通过$()确保属性被正确解析。

运行修正后的脚本,AD里的路径就会正常显示为\\SERVERNAME\ts-你的SamAccountName了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:11:55