【问题标题】:Powershell loop only execute command in the last loop why?Powershell循环只在最后一个循环中执行命令,为什么?
【发布时间】:2017-06-16 08:50:22
【问题描述】:

我正在编写一个简单的 powershell 脚本,它从文本文件中读取用户名列表,对于每个名称运行命令“Get-ADUser -Filter {Name -eq $name} | select name”但是代码只完成了搜索列表中的姓氏,而不是列表中的每个人,任何人都可以解释为什么会发生这种情况?

foreach($name in $(gc .\tmp\checkname.txt))
{
   Write-Host "checking $name now"
   Get-ADUser -Filter {Name -eq $name} | select name

}

输出如下

checking Donna Anthes   now
checking Jessica Kelly  now
checking Malcolm Page   now
checking Rommie Redlich now

name          
----          
Rommie Redlich

我希望输出如下所示

checking Donna Anthes   now
name          
----          
Donna Anthes


checking Jessica Kelly  now
name          
---- 
Jessica Kelly

checking Malcolm Page   now
name          
---- 
Malcolm Page

checking Rommie Redlich now

name          
----          
Rommie Redlich

【问题讨论】:

  • 这并不意味着它只在最后一个循环中执行命令,它意味着Get-ADUser只在最后一个循环中匹配名称。
  • 您可能想要利用不明确的名称解析:Get-ADUser -LDAPFilter "(&(anr=$name))"
  • 如果该输出正确,则文本文件中的所有名称似乎都有尾随空格,除了最后一个,这可以解释为什么它是唯一找到的。
  • Mjolinor 的建议就是答案。非常感谢

标签: loops powershell


【解决方案1】:

只是想让任何阅读此问题的人知道 Mjolinor 的评论就是答案。每个名称末尾的空格 get-aduser 不会返回任何结果。我更新了我的代码如下

    $a = $(($name).trim())
    Write-Host "checking $a now"

    Get-ADUser -Filter { Name -eq $a } | select name | ft -HideTableHeaders

得到预期的输出

checking Donna Anthes now

Donna Anthes
Donna Anthes


checking Jessica Kelly now

Jessica Kelly


checking Malcolm Page now

Malcolm Page


checking Rommie Redlich now

Rommie Redlich
Rommie Redlich

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-17
    • 2017-09-20
    • 2019-08-04
    • 2022-08-23
    • 1970-01-01
    • 2013-11-06
    • 1970-01-01
    • 2021-09-07
    相关资源
    最近更新 更多