powershell - 为什么我不能向 ADobject 添加成员

标签 powershell active-directory

如果我有 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

It sure is!

关于powershell - 为什么我不能向 ADobject 添加成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40642777/

相关文章:

datetime - Coldfusion 计算帐户过期

powershell - 使用基于括号的 -Filter 参数时,为什么 $PSItem 的行为不符合预期?

powershell - 无法将参数 “address”转换为 “System.Object[]”,值 “DownloadString”键入 “System.Uri”: “Cannot convert the ” System.Object []“

performance - 由于脚本执行时间长,Jenkins 超时

azure - 我想要具有多个范围的访问 token ,包括 http

azure - 我们可以将多个 Azure Active Directory 租户映射到单个订阅吗?

c# - 如何限制多次登录同一用户 C# 和 Active Directory 成员身份

powershell - 测试以查看 powershell 中是否存在计划任务

powershell - 使用 Test-path 检查多个路径

html - 输出变量时去掉标题