为什么Add-Member认为每个可能的属性已经存在(在Microsoft.ActiveDirectory.Management.ADUser对象上)?

时间:2015-10-03 06:14:03

标签: powershell

所以,我在question on ServerFault帮忙,我遇到了一些奇怪的行为。

如果我获得Microsoft.ActiveDirectory.Management.ADUser类型的对象,例如通过Get-ADUser,则每当我尝试使用NoteProperty添加Add-Member时,您会遇到以下情况:

PS C:\Users\someuser> $u = get-aduser someuser
PS C:\Users\someuser> $u | add-member ldskfjlkdsfj dfklsjdflkdsjf
add-member : Cannot add a member with the name "ldskfjlkdsfj" because a member with that
name already exists. To overwrite the member anyway, add the Force parameter to your
command.
At line:1 char:6
+ $u | add-member ldskfjlkdsfj dfklsjdflkdsjf
+      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (CN=someuser,...example,DC=com:PSObject) [Add-Member], InvalidOperationException
    + FullyQualifiedErrorId : MemberAlreadyExists,Microsoft.PowerShell.Commands.AddMemberCommand

使用-Force参数可以让我'#34;覆盖"这个虚假的属性,但这个对象的含义是什么让它像每个属性一样?

尝试访问任何属性(即使之前未添加的属性)只返回任何内容,而不是像我期望的那样抛出异常。设置一个房产是可能的,虽然有一个"常规" PowerShell对象我想它不应该是。

PS C:\Users\someuser> $u = get-aduser someuser
PS C:\Users\someuser> $u.bogus
PS C:\Users\someuser> $u.fishy
PS C:\Users\someuser> $u.fishy = "fish"
PS C:\Users\someuser> $u.fishy
fish
PS C:\Users\someuser>

我不确定这是否重要,但在使用PowerShell 4.0的Windows Server 2012 R2上可以看到此行为。

1 个答案:

答案 0 :(得分:2)

这是因为AD对象是特殊的"当谈到扩展属性时,它们行为奇怪。你可以read more about that in this question,它与管道绑定混淆。

在这种情况下,我认为是由于Add-Member测试是否存在特定属性(即使属性是刚组成且没有值,AD对象上也会一直为真)

在测试各种属性名称并分配给它们时,您自己已经看到了这一点。

您应该可以使用Add-Member -Force来使其正常工作。