아래에 간단한 스크립트가 있습니다.하지만 필자가 다음을 포함하는 이유를 이해할 수 없습니다. "$($_.samAccountName)"
나는 단지 $_.samAccountName
으로 스크립트를 시도했으며 정상적으로 작동합니다. 다행히도 쉽게 대답 할 수 있지만 코드에 $()
을 추가해야하는 이유는 무엇입니까?
감사합니다.
아래에 간단한 스크립트가 있습니다.하지만 필자가 다음을 포함하는 이유를 이해할 수 없습니다. "$($_.samAccountName)"
나는 단지 $_.samAccountName
으로 스크립트를 시도했으며 정상적으로 작동합니다. 다행히도 쉽게 대답 할 수 있지만 코드에 $()
을 추가해야하는 이유는 무엇입니까?
감사합니다.
IMO이 경우 variable/expression expansion syntax
을 사용할 이유가 없습니다.
어쩌면 원본 작성자가 -Identity
매개 변수의 값을 큰 따옴표로 묶어서 변수 확장을 확인하려고했을 수도 있습니다.
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 | ...
잘 작동합니다.
Ansgar Wiechers, 정말 좋은 설명에 감사드립니다. 그것은 매우 유용합니다. 게시 할 시간을내어 주셔서 감사합니다. – Retro69
변수 확장은 [이 기사] (http://blogs.msdn.com/b/powershell/archive/2006/07/15/variable-expansion-in-strings-and-herestrings.aspx)에 설명되어 있습니다. – vonPryz
두 가지 모두 감사합니다. 기사는 큰 환호 vonPryz입니다. – Retro69
@ user2784332 도와 줘서 기쁩니다! –