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