2008-08-17 2 views
1

을 누락 인용이 :내가 여기서 뭔가를 System.DirectoryServices.ResultPropertyCollection

$objSearcher = New-Object System.DirectoryServices.DirectorySearcher 
$objSearcher.SearchRoot = New-Object System.DirectoryServices.DirectoryEntry 
$objSearcher.Filter = ("(objectclass=computer)") 
$computers = $objSearcher.findall() 

다음 두 출력이 차이가 왜 그래서 질문은?

$computers | %{ 
"Server name in quotes $_.properties.name" 
"Server name not in quotes " + $_.properties.name 
} 
PS> $computers[0] | %{"$_.properties.name"; $_.properties.name} 
System.DirectoryServices.SearchResult.properties.name 
GORILLA 

답변

1

$ _. properties.name을 문자열에 포함 시켰을 때 속성의 유형 이름을 반환했습니다. 변수가 문자열에 포함되고 문자열이 평가되면 변수에서 참조하는 해당 객체에 대해 ToString 메서드를 호출합니다 (이후에 지정된 멤버는 제외).

이 경우 ToString 메서드는 형식 이름을 반환합니다. 당신은 변수 EBGreen 제안 것과 유사한 구성원의 평가를 강제하지만, 이전의 문자열에 추가 한 후 PowerShell을 변수를 평가하고 회원이 처음 지정된 다른 시나리오에서는

"Server name in quotes $($_.properties.name)" 

를 사용하여 할 수 있습니다.

당신은 바로 당신이 속성들의 모음을 되 찾는 것입니다. $ computer [0] .properties을 get-member에 파이프하면 명령 줄에서 개체 모델을 바로 탐색 할 수 있습니다.

중요한 부분은 아래와 같습니다.

유형 이름 : System.DirectoryServices.ResultPropertyCollection

이름 MemberType 정의


값 재산권 System.Collections.ICollection 값 {얻을;}

0

나는 PS가 정보를 보간하는 방식과 관련이 있다고 생각합니다. "(. _ $ 속성) 따옴표 $에서 서버 이름 .name을"이 시도

을 또는 당신도 $ 하나 더 설정이 필요할 수 있습니다(). 나는 지금 그것을 시험 할 수있는 어딘가가 아니다.

0

닫기 - 아래 내용은 올바르게 작동하지만 누구든지 자세한 설명이 있으면 관심을 보일 것입니다.

PS C:\> $computers[0] | %{ "$_.properties.name"; "$($_.properties.name)" } 
System.DirectoryServices.SearchResult.properties.name 
GORILLA 

그래서 $ _ .properties.name은 내가 예상 한대로 복종하지 않는 것처럼 보입니다. 내가 올바르게 시각화하고 있다면 name 속성이 다중 값이라는 사실은 배열을 반환하게 만듭니다.

$computers[0] | %{ $_.properties.name[0]} 

이 "이름"문자열했다이 첫 번째 문자를 반환해야하지만 배열이기 때문에이 첫 번째 문자열을 반환 다음 작품이 이유를 설명하는 것이다 (나는 생각한다).

관련 문제