我正在尝试创建一个PowerShell脚本,该脚本从一系列部分计算机名称中获取列表并将它们返回给我
到目前为止,我已经导入了 ActiveDirectory 模块并设置了数组。然后我对数组运行 foreach ,但它不返回任何结果,而是转到新行。
我尝试将 Get-ADComputer 行分配给变量并调用变量。我也试过使用 Return 而没有达到我的结果。
结果可以在屏幕上的列表中打印出来,没关系。我只需要它来返回结果,然后我可以从中建立起来。
这是我到目前为止所做的:
$getPC = @("7477", "7473", "7474")
foreach ($i in $getPC)
{
Get-ADComputer -filter {name -like "*$i*"} | select name
}
当我单独运行 Get-ADComputer 行并输入位置参数时,我没有任何问题。有什么想法吗?
答案 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
。