我正在编写一个包含以下代码的脚本:
Get-ADUser -Identity johndoe | Set-ADUser -Replace @{customattribute = 'yes'}
...并且我收到此错误:
Set-ADUser : An attempt was made to modify an object to include an
attribute that is not legal for its class
At line:1 char:61
+ Get-ADUser -Identity johndoe | Set-ADUser -Replace...
+
~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (CN=John
Doe,DC=test,DC=local:ADUser) [Set-ADUser], ADException
+ FullyQualifiedErrorId :
ActiveDirectoryServer:8317,
Microsoft.ActiveDirectory.Management.Commands.SetADUser
如果我改为使用Get-ADuser,则可以看到自定义属性和为其分配的值。只是当我尝试使用set-ADuser修改它时,我得到了错误。
Get-ADUser johndoe -Properties customattribute | ft name,customattribute
name customattribute
---- ---------------
John Doe No
我已经进行了研究并进行了许多故障排除,但仍无法解决问题。有人有建议吗?
谢谢!
答案 0 :(得分:2)
我建议检查Powershell属性是否已失效,以进行故障排除,这可能是由于架构问题引起的。
以下Powershell命令应为您提供已清除的ADObjects的属性列表。检查并查看您的自定义属性是否在此列表中:
$SchemaPath = (Get-ADRootDSE).SchemanamingContext
$DefunctAttributes = Get-ADObject -Filter {Isdefunct -eq $True} -Properties IsDefunct -SearchBase $SchemaPath | Select Name
如果是这种情况,我将按照@Mathias R. Jessen的建议进行操作,并打开一张MS票。
修改
奇怪的是它没有出现在列表中。您是否检查过该属性实际上是架构的一部分?
运行此命令将显示所有名称包含“ custom”的架构属性:
$SchemaPath = (Get-ADRootDSE).SchemanamingContext
Get-ADObject -Filter * -Properties * -SearchBase $SchemaPath |select Name | Where-Object {$_.name -match "custom"}
您的自定义属性是否显示在此列表上? 如果现在以某种方式从架构中丢失了它。
如果是的话,我猜想正在发生某种形式的腐败,无论如何我都会向微软举报。