2013-10-21 2 views
0

아래에 간단한 스크립트가 있습니다.하지만 필자가 다음을 포함하는 이유를 이해할 수 없습니다. "$($_.samAccountName)" 나는 단지 $_.samAccountName으로 스크립트를 시도했으며 정상적으로 작동합니다. 다행히도 쉽게 대답 할 수 있지만 코드에 $()을 추가해야하는 이유는 무엇입니까?

감사합니다.

답변

1

IMO이 경우 variable/expression expansion syntax을 사용할 이유가 없습니다.

어쩌면 원본 작성자가 -Identity 매개 변수의 값을 큰 따옴표로 묶어서 변수 확장을 확인하려고했을 수도 있습니다.

+1

변수 확장은 [이 기사] (http://blogs.msdn.com/b/powershell/archive/2006/07/15/variable-expansion-in-strings-and-herestrings.aspx)에 설명되어 있습니다. – vonPryz

+0

두 가지 모두 감사합니다. 기사는 큰 환호 vonPryz입니다. – Retro69

+0

@ user2784332 도와 줘서 기쁩니다! –

5

PowerShell은 문자열 내에서 개체 속성을 평가하지 않습니다. 이 같은 표현이있는 경우 :

"$_.samAccountName" 

변수 (이 경우 "현재 개체를"$_ 변수)의 ToString() 메서드의 반환 값으로 확장되는 문자열의 나머지 (.samAccountName) 남아있는 동안 변하지 않은.

"CN=Domain Users,CN=Users,DC=example,DC=com.samAccountName" 

대신 그룹 개체의 samAccountName 속성 값 : 결과적으로이 같은 것을 얻는다.

객체의 속성을 평가하고 문자열의 결과를 넣어 문자열 내에서

"$($_.samAccountName)" 

힘 PowerShell을 서브 표현식 연산자 $() 사용.

예 :

PS C:\>$g = Get-ADGroup 'Domain Users' 
PS C:\>$g 

DistinguishedName : CN=Domain Users,CN=Users,DC=example,DC=com 
GroupCategory  : Security 
GroupScope  : Global 
Name    : Domain Users 
ObjectClass  : group 
ObjectGUID  : 072d9eda-a274-42ee-a4ee-b4c2810bb473 
SamAccountName : Domain Users 
SID    : S-1-5-21-1227823062-450780232-214340840-513 

PS C:\>$g.ToString() 
CN=Domain Users,CN=Users,DC=example,DC=com 
PS C:\>"$g" 
CN=Domain Users,CN=Users,DC=example,DC=com 
PS C:\>"$g.samAccountName" 
CN=Domain Users,CN=Users,DC=example,DC=com.samAccountName 
PS C:\>"$($g.samAccountName)" 
Domain Users

C.B.가 제대로 말했다 그러나, 특정 경우에 당신이 전혀 따옴표로 $_.samAccountName 묶어야 할 필요가 없습니다. 이를 다음과 같이 사용하십시오 :

$MemberCount = Get-ADGroupMember -Identity $_.samAccountName | ... 

잘 작동합니다.

+0

Ansgar Wiechers, 정말 좋은 설명에 감사드립니다. 그것은 매우 유용합니다. 게시 할 시간을내어 주셔서 감사합니다. – Retro69

관련 문제