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

PowerShell script: AD query based on computer-name pattern not returning results

本问题已经有最佳答案,请猛点这里访问。

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

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

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

结果只能在屏幕上的列表中打印出来,就可以了。我只需要它来返回结果,然后就可以从中进行构建。

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

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

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


即使这种做法很普遍,也不要将脚本块({ ... })用作-Filter自变量。

将您的-Filter构造为字符串,这是-Filter参数的实际类型;如果这样构造,则会避免许多难以理解的问题。

因此,而不是:

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

用途:

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

有关说明,请参阅我的答案。

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

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

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