2016-11-16 3 views
1

형식이 Microsoft.ActiveDirectory.Management.ADObject 인 개체는 -force를 사용하지 않는 한 Add-Member를 사용하여 메모 속성을 추가 할 수 없습니다.왜 ADOBject에 멤버를 추가 할 수 없습니까?

추가 회원 : 나는 힘 지시어를 사용하지 않는 경우에, 나는 오류처럼 얻을 이름 "SAMAccountName을" 그 이름을 가진 멤버가 이미 존재하기 때문에 함께 멤버를 추가 할 수 없습니다. 어쨌든 멤버를 덮어 쓰려면 명령에 Force 매개 변수를 추가하십시오.

그러나 아직 존재하지 않습니다. 그리고 그것은 모든 속성 이름에서 발생합니다. 예를 들어 :

$domainAccount | Add-Member -NotePropertyName SAMAccountName -NotePropertyValue $account.name 

는하지만,이 작품 :이 설명 문서를 찾을 수 없습니다

$domainAccount | Add-Member -NotePropertyName SAMAccountName -NotePropertyValue $account.name -force 

. 설명해 주시겠습니까? 그리고, -force 지시어로이 작업을 수행 할 때 위험이 있습니까?

+0

가 - 나는 PowerShell을 런타임을 믿지 않거나 :

$obj = New-Object Microsoft.ActiveDirectory.Management.ADObject $obj.SamAccountName = 'AccountName' $obj | Get-Member 

가 출력

: 그냥 같이, 그것에 대한 값을 정의해야합니까? 이미 존재하지 않는다는 증거가 있습니까? – TessellatingHeckler

답변

2

ADObject 클래스는 약간 어색한 행동을합니다. 즉, 이라는 속성이있는 경우을 요청하면 그렇지 않은 경우 속성이 생성됩니다.

Add-MemberSAMAccountName 속성이 이미 존재하는지 확인하면 부수적으로 생성됩니다.

-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!

+0

'Add-Member'가 좀 이상하게 느껴질 때가 있는데, 특히 루프에서 사용되는 경우 특히, 각 항목에 속성 만 추가하더라도 어쨌든'-Force'를 사용해야합니다. 결과적으로, 저는 이제 항상'-Force'로 호출합니다. – briantist

0

Microsoft.ActiveDirectory.Management.ADObject이미 SAMAccountName을 속성이 있습니다. 다시 만들 필요가 없습니다. "* * 그러나, 이미 존재하지 않습니다."

TypeName: Microsoft.ActiveDirectory.Management.ADObject 

Name   MemberType   Definition                    
----   ----------   ----------                    
Contains  Method    bool Contains(string propertyName)              
Equals   Method    bool Equals(System.Object obj)               
GetEnumerator Method    System.Collections.IDictionaryEnumerator GetEnumerator()        
GetHashCode Method    int GetHashCode()                  
GetType  Method    type GetType()                   
ToString  Method    string ToString()                  
Item   ParameterizedProperty Microsoft.ActiveDirectory.Management.ADPropertyValueCollection Item(string propertyN... 
SamAccountName Property    Microsoft.ActiveDirectory.Management.ADPropertyValueCollection SamAccountName {get;s... 
+1

'$ obj'를'SamAccountName'을 설정하기 전에'Get-Member' *에 파이프하면, 이미 존재하지 않는다는 것을 알 수 있습니다 –

관련 문제