PowerShell脚本:基于计算机名称模式的AD查询未返回结果

时间:2018-03-09 02:14:20

标签: powershell active-directory filtering

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

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

所以,而不是:

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

使用:

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

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

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

$PSItem

关于您的原始命令:正如Seth建议的那样,最好使用比"7477", "7473", "7474" | ForEach-Object { Get-ADComputer -Filter "Name -like '*$_*'"} | Select-Object Name 更具描述性的循环变量名称,例如$i