【问题标题】:Cannot set manager attribute using ADSI in PowerShell无法在 PowerShell 中使用 ADSI 设置管理器属性
【发布时间】:2019-10-18 12:05:57
【问题描述】:

我从 HR 数据库更新 AD 中的一些用户信息。

文本字段或照片可以正常工作:

$user.Put("telephoneNumber", "1234")
$user.Put("thumbnailPhoto", $binaryfile)
$user.SetInfo()

不过我也得设置管理器试试

$user.Put("manager", "MYDOMAIN\MYUSERNAME")

$user.Put("manager", "MYUSERNAME")

这给出了以下错误:

使用“0”参数调用“setinfo”的异常:“指定了无效的 dn 语法。”

使用 ADSI 更新管理器的正确语法是什么?

【问题讨论】:

    标签: powershell active-directory adsi


    【解决方案1】:

    正如错误消息所示:manager 属性需要一个专有名称 (dn),而不是用户登录名,因此您需要先获取经理的 dn,然后将该值放入 manager 属性中。

    $manager = 'MYUSERNAME'
    
    #...
    
    $searcher = New-Object DirectoryServices.DirectorySearcher(([adsi]''))
    $searcher.Filter = "(&(objectClass=user)(objectCategory=person)(sAMAccountName=${manager}))"
    $dn = $searcher.FindOne().Properties['distinguishedName'][0]
    
    #...
    
    $user.Put('manager', $dn)
    $user.SetInfo()
    

    【讨论】:

    • 应该是$dn = $searcher.FindOne().Properties["distinguishedName"]Path 将包含LDAP://manager 属性不会喜欢它。您还可以在搜索前添加$searcher.PropertiesToLoad.Add("distinguishedName"),以便它只检索您要使用的一个属性,而不是每个属性。
    • @GabrielLuci 感谢您的提醒。我只是在没有测试的情况下拼凑了这个。
    • 谢谢,但是当我使用 dn 时,我得到了另一个错误:Exception calling "put" with "2" argument(s): "Unspecified error (Exception from HRESULT: 0x80004005 (E_FAIL))"
    • @jlai79 显然Properties['distinguishedName'] 返回一个集合,因此您需要从该集合中选择第一个元素([0])。查看更新的答案。
    猜你喜欢
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多