我将必须逐步解释这一点。首先,这是我要开始工作的一些代码:
$Users = Get-Content c:\textfile.txt
foreach ($user in $users) {Get-ADuser -Filter {UserPrincipalName -like "$user*"}}
因此,当我运行它时,它什么也不返回,我知道这是错误的。所以我用断点看了一点。我发现变量 $ user 确实填充了正确的值。作为测试,我用文本文件中的一个值(使它看起来像下面的代码)替换了过滤器中的 $ user ,并逐步执行了该操作。
$Users = Get-Content c:\textfile.txt
foreach ($user in $users) {Get-ADuser -Filter {UserPrincipalName -like "1234567890*"}}
这是有趣的地方。我将断点放在foreach行上,因为它让它第一次运行,除了空白行外,没有任何内容写入屏幕。当我第二次浏览它时,输出就像命令已运行两次一样,即用户主体名称如1234567890 *的用户对象两次写入屏幕。
作为另一个线索,我尝试了以下代码:
Get-Content c:\textfile.txt | Get-ADuser -Filter {UserPrincipalName -like "$_*" }
它弹出一个错误,提示Filter参数不接受管道输入。我不知道这是否意味着什么,但我怀疑那没有意义,因为我并没有在原始代码中真正使用管道。尽管我已经使用Powershell已有一段时间了,但是我没有跟踪的Get-ADUser cmdlet可能是一个超基本的东西。
答案 0 :(得分:0)
在AD中使用过滤器有点麻烦。实际上是-filter <string>
Get-ADUser -Filter "UserPrincipalName -like '$($user)*'"
where-object
是您尝试使用的另一种过滤器语法。例如。 where-object {UserPrincipalName -like "$user*"}