清除 AD 用户属性问题

清除 AD 用户属性问题
$info = Get-ADUser -Filter * -Properties * | ForEach-Object {$_.PSObject.Properties} | Where-Object {$_.value -like "NULL"}

ForEach ($i in $info){
    Set-ADUser -Identity $i.BaseObject.SamAccountName -Clear $i.Name
}

以上是我用来查找所有字符串值为“NULL”的 AD 用户字段的代码。我正在尝试清除这些字段。

下面是我经常看到的异常,尽管属性名称显然存在(因为它是直接从 AD 属性名称值中提取的)。

我错过了什么?

Set-ADUser : The specified directory service attribute or value does not exist
Parameter name: OfficePhone
At line:2 char:5
+     Set-ADUser -Identity $i.BaseObject.SamAccountName -Clear $i.Name
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (RHanson:ADUser) [Set-ADUser], ArgumentException
    + FullyQualifiedErrorId : ActiveDirectoryCmdlet:System.ArgumentException,Microsoft.ActiveDirectory.Management.Commands.SetADUser

答案1

直接从文档

-办公室电话

[…] 要修改对象属性,您必须使用 LDAP 显示名称。 […]

-办公室电话

[…] 此属性的 LDAP 显示名称 (ldapDisplayName) 是 telephoneNumber。[…]

以下是电话号码属性

CN:电话号码
Ldap 显示名称:电话号码

不幸的是,Get-ADUser -Properties *同时接收两者,OfficePhone并且telephoneNumber我不知道如何以编程方式区分真实属性和模块本身内置的属性别名。

作为一种解决方法,您可以通过管道传输它,Get-ADObject这样就不会对您施加别名属性:

$info = Get-ADUser -Filter * |
            Get-ADObject -Properties * |
            ForEach-Object {$_.PSObject.Properties} |
            Where-Object {$_.value -like "NULL"}

ForEach ($i in $info){
    Set-ADUser -Identity $i.BaseObject.SamAccountName -Clear $i.Name
}

相关内容