如果我有 Microsoft.ActiveDirectory.Management.ADObject 类型的对象,则无法使用 Add-Member 添加注释属性,除非使用 -force。如果我不使用force指令,我会收到如下错误:
Add-Member : Cannot add a member with the name "SAMAccountName" because a member with that name already exists. To overwrite the member anyway, add the Force parameter to your command.
但是,它还不存在。对于任何属性名称都会发生这种情况。例如:
$domainAccount | Add-Member -NotePropertyName SAMAccountName -NotePropertyValue $account.name
但是,这有效:
$domainAccount | Add-Member -NotePropertyName SAMAccountName -NotePropertyValue $account.name -force
我找不到解释这一点的文档。你能解释一下吗?而且,使用 -force 指令执行此操作有任何危险吗?
最佳答案
ADObject
类的行为有点笨拙,因为只需询问属性是否存在,如果不存在,就会导致创建该属性。
当 Add-Member
检查 SAMAccountName
属性是否已存在时,它会偶然导致该属性被创建。
只需使用-Force
参数开关即可。
您可以自己重现此行为:
Import-Module ActiveDirectory
$ADObject = New-Object Microsoft.ActiveDirectory.Management.ADObject
# No SamAccountName property will be listed
$ADObject | Get-Member
现在,尝试引用一个不存在的属性,例如“SamAccountName”(ADObject 扩展了 ADPropertyValueCollection 类,该类基本上是一个字典,因此对其属性进行索引是完全有效的):
$ADObject["SamAccountName"]
# SamAccountName property will now be listed even though we haven't set it
$ADObject | Get-Member
这不限于 AD 属性名称,任何内容都可以:
"1 This","2 Is","3 Quite","4 Funky","5 Isn't","6 It?" |ForEach-Object {
[void]$ADObject[$_]
}
$ADObject |Get-Member
关于powershell - 为什么我不能向 ADobject 添加成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40642777/