【问题标题】:Powershell variable not passed into filterPowershell变量未传递到过滤器
【发布时间】:2013-03-04 13:34:53
【问题描述】:

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

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

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

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

【问题讨论】:

  • PS C:\Users\pskwarek> $csv 名称 ---- Piotr Skwarek Renata Skwarek

标签: variables powershell filter foreach


【解决方案1】:

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

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

【讨论】:

  • 该解决方案的语法实际上比我的更清晰,我总是忘记这个:p
【解决方案2】:
foreach ($a in $csv) 
{
 $sb = [scriptblock]::create("DisplayName -like '*$a*'")
 (get-aduser -f $sb).SamAccountName
}

【讨论】:

    【解决方案3】:

    试试这个:

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

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

    【讨论】:

    • 我是脚本新手,我不得不承认,尽管它工作得很好,但我还是不明白
    • 基本上,在 PS 中,您可以构造字符串并在其中放置变量的“占位符”:$string = ("This is {0} {1}" -f "my","script") 这只是告诉 PowerShell 将 {0} 替换为放置在 ' 之后的列表的第一个元素-s',第二个 {1},依此类推。
    【解决方案4】:

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-24
      • 1970-01-01
      • 2011-11-13
      • 1970-01-01
      • 2013-08-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多