使用PowerShell错误修改自定义Active Directory属性

时间:2018-07-23 15:03:45

标签: powershell custom-attributes

我正在编写一个包含以下代码的脚本:

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

我已经进行了研究并进行了许多故障排除,但仍无法解决问题。有人有建议吗?

谢谢!

1 个答案:

答案 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"}

您的自定义属性是否显示在此列表上? 如果现在以某种方式从架构中丢失了它。

如果是的话,我猜想正在发生某种形式的腐败,无论如何我都会向微软举报。