Ret*_*o69 0 powershell powershell-3.0
我有一个简单的脚本,我正在看,但我不明白为什么作家包括以下 "$($_.samAccountName)"我已经尝试过的脚本,$_.samAccountName它工作正常.希望它是一个简单的答案,但为什么你会$()在代码中有额外的?
非常感谢.
Get-ADGroup -Filter * |
foreach {
$props = [ordered] @{
GroupName = $_.Name
MemberCount = Get-ADGroupMember -Identity "$($_.samAccountName)" | Measure-Object | select -ExpandProperty Count
}
New-Object -TypeName psobject -Property $props
} | sort MemberCount
Run Code Online (Sandbox Code Playgroud)
PowerShell不评估字符串内的对象属性.如果你有这样的表达式:
"$_.samAccountName"
Run Code Online (Sandbox Code Playgroud)
变量(在本例中为"当前对象"变量$_)扩展为其ToString()方法的返回值,而string(.samAccountName)的其余部分保持不变.结果你得到这样的东西:
"CN=Domain Users,CN=Users,DC=example,DC=com.samAccountName"
Run Code Online (Sandbox Code Playgroud)
而不是组对象的samAccountName属性的值.
$()在字符串中使用子表达式运算符
"$($_.samAccountName)"
Run Code Online (Sandbox Code Playgroud)
强制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 UsersRun Code Online (Sandbox Code Playgroud)
但是,正如CB正确地说的那样,在您的特定情况下,您根本不需要$_.samAccountName用双引号括起来.像这样使用它:
$MemberCount = Get-ADGroupMember -Identity $_.samAccountName | ...
Run Code Online (Sandbox Code Playgroud)
应该工作得很好.
| 归档时间: |
|
| 查看次数: |
179 次 |
| 最近记录: |