所以,我在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上可以看到此行为。
答案 0 :(得分:2)
这是因为AD对象是特殊的"当谈到扩展属性时,它们行为奇怪。你可以read more about that in this question,它与管道绑定混淆。
在这种情况下,我认为是由于Add-Member
测试是否存在特定属性(即使属性是刚组成且没有值,AD对象上也会一直为真)
在测试各种属性名称并分配给它们时,您自己已经看到了这一点。
您应该可以使用Add-Member -Force
来使其正常工作。