2016-05-03 37 views
0

我正在使用PowerShell编写脚本来自动创建AD用户。我使用的一个条件是检查用户是否已经存在,然后到Write-Host "User exists"并移动到数组中的下一个元素。但是,当我运行该脚本时,它给了我一个奇怪的行为。我将把代码放在一起,然后解释当我放置断点时会发生什么。变量不会根据我的列表更改值

$MACList = Get-Content $Path\MACs.txt 
foreach ($MAC in $MACList){ 
    $MABName = Get-ADUser $MAC 
    if ($MABName -ne $null) { 
     Write-Host "MAB already exists, moving to next" 
    } else { 
     # create the new user 
    } 

当我使用断点运行脚本,我可以看到$MACList包含文件中的Mac电脑。当我移动到下一步时,我可以看到$MAC包含每个元素,因为我遍历$MACList数组。当它到达$MABName行时,$MAC确实包含一个MAC地址,所以如果我拥有该用户并将$MABName设置为该用户,则应该查找该地址。如果Get-User cmdlet没有返回对象,它似乎保持相同的值。任何想法为什么会发生这种情况?

回答

1

Get-ADUser为不存在的用户抛出错误,因此该变量保留其先前的值。使用-Filter参数可避免此问题:

$MABName = Get-ADUser -Filter "SamAccountName -eq '$MAC'" 
+0

非常有趣。这工作。谢谢。 – Joseph