变量不会根据我的列表

时间:2016-05-03 11:25:19

标签: powershell active-directory

我正在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 个答案:

答案 0 :(得分:1)

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

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