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

PowerShell脚本:基于计算机名模式的AD查询不返回结果,powershell,active-directory,filtering,Powershell,Active Directory,Filtering,我正在尝试创建一个PowerShell脚本,该脚本从部分机器名数组中获取一个列表并返回给我 到目前为止,我已经导入了ActiveDirectory模块并设置了阵列。然后对数组运行foreach,但它不返回任何结果,而是转到新行 我已经尝试将Get ADComputer行分配给一个变量并调用该变量。我也尝试过使用回报,但没有达到我的效果 结果可以在屏幕上的列表中打印出来,没关系。我只需要它返回结果,然后我就可以从中积累 这就是我到目前为止所做的: $getPC = @("7477", "7473"

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

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

我已经尝试将Get ADComputer行分配给一个变量并调用该变量。我也尝试过使用回报,但没有达到我的效果

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

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

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

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

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

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

因此,不是:

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

有关解释,请参阅我的


另一方面,您可以使用带有
ForEach Object
cmdlet的单个管道稍微简化您的命令,在该cmdlet的脚本块中,自动
$\ucode>变量(别名:
$PSItem
)表示当前的输入对象:

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

关于原始命令:按照建议,最好使用比
$i
更具描述性的循环变量名,例如
$computer

Oops!谢谢你,赛斯,真是我的错。我已经修正了答案,并且为了清晰起见对其进行了重组;我还添加了您关于重新命名循环变量的建议,因此我们可以清理这里的注释。
"7477", "7473", "7474" |
  ForEach-Object { Get-ADComputer -Filter "Name -like '*$_*'"} |
    Select-Object Name