Powershell变量未传入过滤器

时间:2013-03-04 13:34:54

标签: variables powershell filter foreach

我需要创建scirpt,将用户从列表(包含用户显示名称)添加到组 我遇到的问题是: 当我发出命令时:

PS C:\Users\pskwarek> foreach ($a in $csv) {(get-aduser -f "DisplayName -like 'Piotr Skwarek'").samaccountname}
pskwarek
pskwarek

但是如果我使用$变量它就不起作用:

PS C:\Users\pskwarek> foreach ($a in $csv) {(get-aduser -f "DisplayName -like '$a.name'").samaccountname}

下一步我想将其传递给:

Add-adgroupMember -identity "groupname" -member samaccountname

但我无法迈出这一步

修改

PS C:\Users\pskwarek> $csv
Name
----
Piotr Skwarek
Renata Skwarek

4 个答案:

答案 0 :(得分:2)

您需要将$ a.name放在子表达式中:

foreach ($a in $csv) 
{
    $user = Get-ADUser -Filter "DisplayName -like '$($a.name)'" 
    Add-ADGroupMember groupname -Members $user
}

答案 1 :(得分:0)

试试这个:

$csv | % { Add-ADGroupMember -Identity "Groupname" -Member $_.Name  }

答案 2 :(得分:0)

foreach ($a in $csv) 
{
 $sb = [scriptblock]::create("DisplayName -like '*$a*'")
 (get-aduser -f $sb).SamAccountName
}

答案 3 :(得分:0)

试试这个:

foreach ($a in $csv) {(get-aduser -f ("DisplayName -like '{0}'" -f $a.name)).samaccountname}

您不能像以前那样直接在字符串中使用变量的成员。 使用字符串格式(我提出的'-f'语法)始终有效。 另一种解决方案是使用临时变量来存储$ a.name