【问题标题】:PowerShell script: AD query based on computer-name pattern not returning results [duplicate]PowerShell 脚本:基于计算机名称模式的 AD 查询不返回结果 [重复]
【发布时间】:2018-08-17 13:03:24
【问题描述】:

我正在尝试创建一个 PowerShell 脚本,该脚本从部分机器名称的数组中获取一个列表并将它们返回给我

到目前为止,我已经导入了 ActiveDirectory 模块并设置了数组。然后我对数组运行 foreach,但它不返回任何结果,而是转到新行。

我尝试将 Get-ADComputer 行分配给一个变量并调用该变量。我也尝试过使用 Return 并没有达到我的结果。

结果可以打印在屏幕上的列表中,没关系。我只需要它返回结果,然后我就可以从中建立起来。

这是我到目前为止所做的:

$getPC = @("7477", "7473", "7474")
foreach ($i in $getPC)
{
    Get-ADComputer -filter {name -like "*$i*"} | select name
}

当我单独运行 Get-ADComputer 行并输入位置参数时,我没有问题。有什么想法吗?

【问题讨论】:

    标签: powershell active-directory filtering


    【解决方案1】:

    即使这种做法很普遍,也不要使用 脚本块 ({ ... }) 作为 -Filter 参数

    -Filter 构造为字符串,这是-Filter 参数的实际类型;如果你这样构建它,你将避免许多晦涩的问题。

    所以,而不是:

    -Filter { Name -like "*$i*" } # WRONG - do not use { ... }
    

    使用:

    -Filter "Name -like '*$_*'" # OK - use of a string
    

    有关解释,请参阅我的this answer


    顺便说一句,您可以使用带有ForEach-Object cmdlet 的单个管道稍微简化命令,在其脚本块中自动$_ 变量(别名:$PSItem)代表手头的输入对象:

    "7477", "7473", "7474" |
      ForEach-Object { Get-ADComputer -Filter "Name -like '*$_*'"} |
        Select-Object Name
    

    关于您的原始命令:正如Seth 建议的那样,最好使用比$i 更具描述性的循环变量名称,例如$computer

    【讨论】:

    • 糟糕!谢谢@Seth,确实是我的错误。我已经确定了答案,并为清晰起见对其进行了重组;我还添加了您对循环变量命名的建议,因此我们可以在此处清理 cmets。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-22
    相关资源
    最近更新 更多