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

PowerShell调用InvokeSet报目录属性不在缓存、ADSI变量异常如何解决

问题原因
  • 你观察到的$User输出System.DirectoryServices.DirectoryEntry不属于异常,这是Write-Host输出DirectoryEntry类型对象的默认行为:Write-Host会直接调用对象的ToString()方法,而该类的ToString()默认返回类型全名,不会输出对象属性值。你可以直接输入$User不加Write-Host,或者调用$User.Name等具体属性验证对象是否正确绑定了AD用户。
  • 真正触发InvokeSet报错的原因是:EnableRemoteControl、TerminalServicesHomeDrive属于AD用户的终端服务扩展属性,默认不会被ADSI预加载到本地属性缓存中,因此调用InvokeSet时会提示找不到对应属性。
修复方案

方案1:调整现有ADSI写法

修改后代码如下:

# 设置远程控制权限
$LdapUser = "LDAP://" + (Get-ADUser $username).distinguishedName
# 用可控方式绑定AD用户对象,启用安全认证
$User = New-Object System.DirectoryServices.DirectoryEntry($LdapUser, $null, $null, [System.DirectoryServices.AuthenticationTypes]::Secure)
# 强制刷新属性缓存,加载所有用户扩展属性
$User.RefreshCache()
# 修改终端服务属性
$User.InvokeSet("EnableRemoteControl",5)
$User.InvokeSet("TerminalServicesHomeDrive","U:\")
# 提交修改到AD
$User.SetInfo()

方案2:使用ActiveDirectory模块原生方法(更稳定)

直接调用Set-ADUser操作属性,避免ADSI缓存问题:

# 导入AD模块(如已加载可省略)
Import-Module ActiveDirectory
# 批量替换用户属性
Set-ADUser -Identity $username -Replace @{
    EnableRemoteControl = 5
    TerminalServicesHomeDrive = "U:\"
}
注意事项
  • 确保运行脚本的账号拥有目标AD用户的属性写入权限,通常需要域管理员权限或被委派了用户属性编辑权限
  • Windows Server 2008 R2及以上版本的域控默认已包含终端服务相关扩展属性,低版本域控需要先扩展AD架构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:21:04