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
但是,正如CB正确所说,在您的特定情况下,您根本不需要$_.samAccountName
用双引号引起来。像这样使用它:
$MemberCount = Get-ADGroupMember -Identity $_.samAccountName | ...
应该可以正常工作。