如果使用对象,则在foreach循环中获取ADUser不会返回任何内容

$users = Get-Content "C:\PowerShellScript\CSV\swyxusers.csv" $test = Foreach ($user in $users){ Get-ADUser -Filter {Name -like "*$user*" } | Select-Object SamAccountName, Enabled } $test| export-csv -Force -Append "C:\PowerShellScript\CSV\skit.csv" 

运行上面的结果没有任何导出到CSV,但如果我添加Write-Host "$User"它导出的用户列表。 所以我知道导出function的作品。

如果我像这样运行它:

 $users = Get-Content "C:\PowerShellScript\CSV\swyxusers.csv" $test = Foreach ($user in $users){ Get-ADUser -Filter {Name -like "*User 1*" } | Select-Object SamAccountName, Enabled } $test| export-csv -Force -Append "C:\PowerShellScript\CSV\skit.csv" 

它填充我的CSV与“用户1”的结果(文档中的第一个用户,这是例外的结果),在$ uservariables中有行的次数。 所以我知道我的search方法的作品。

所以我的问题是如何让它通过我的CSV文件循环,实际上find什么时使用对象search? 因为它工作时,我使用手动input的string,而不是在使用对象时。

CSV格式如下:

 USER 1 USER 2 USER 3 USER 4 

编辑:问题是不相关的foreach循环,如果我运行以下:

 $test = "TEST USER" Get-ADUser -Filter {Name -eq "*$test*"} 

它仍然不起作用,必须与过滤如何完成。

通常,当创build一个searchfilter作为多个string的组合时,我避免在input本身中这样做。 所以例如(和你所发现的),而不是做以下几点

 Get-ADUser -Filter {Name -like "*$user*"} 

我尝试创build一个filter,然后调用该函数

 $filter = "*" + $user + "*" Get-ADUser -Filter {Name -like $filter} 

我发现这是成功构buildLDAPfilter作为多个string组合的唯一方法。 这也使您能够在运行查询之前validation您的filter。

根据我在Eric Sc​​hnabel下面的评论,您不应该在filter中将“$”variables放在引号内。您的更新脚本应该将variables与通配符合并,以使filter起作用

 $users = Get-Content "C:\PowerShellScript\CSV\swyxusers.csv" $test = Foreach ($user in $users){ $user = "*" + $user + "*" Get-ADUser -Filter {Name -like $user } | Select-Object SamAccountName, Enabled} $test| export-csv -Force -Append "C:\PowerShellScript\CSV\skit.csv" 

正如我在我的编辑中所述,它必须与过滤。 我现在觉得很蠢,现在我find了解决办法。

这不会工作:

 Get-ADUser -Filter {Name -like "*$user*" } 

这不会工作:

 Get-ADUser -Filter {Name -like "$user" } 

但是这个工作:

 Get-ADUser -Filter {Name -like $user} 

如果你有“或*它会中断,只是没有错误信息的function。

在这里find解决scheme: http : //www.powershellish.com/blog/2015-11-17-ad-filter