我正在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未返回对象,它似乎保持相同的值。关于为什么会发生这种情况的任何想法?
答案 0 :(得分:1)
Get-ADUser
会为不存在的用户抛出错误,因此该变量会保留其先前的值。使用-Filter
参数可以避免此问题:
$MABName = Get-ADUser -Filter "SamAccountName -eq '$MAC'"