我正在尝试实施一个脚本来帮助自动创建帐户。它将为用户查询AD,如果找到,则在末尾添加一个数字,然后执行另一个查询。再次,如果找到,请更改数字,例如2 - 3.
例如,如果以下用户已在AD中:
我想添加一个新用户,Smith,Jacob W.它应该首先查询AD for SmithJW,然后如果找到,添加2,如果找到,添加3.我在下面有两个工作,基本上是它,但由于它找到了一个SmithJW2,它只是将计数器添加到该名称。所以我会回到SmithJW22。
代码:
$user = "smithjw"
Do{
$adcheck = $null
$counter = 2
Try {$adcheck = Get-Aduser $user
}
Catch {If($adcheck.SamAccountName-eq$null){$NewUserName = $user}
}
If($adcheck.SamAccountName-ne$null){$user = $user+$counter++}
}until($adcheck.SamAccountName-eq$null)
所以我正在寻找一种方法,如果我找到一个用户(即SmithJW2)先删除“2”,然后添加计数器。
希望这是有道理的。感谢。
答案 0 :(得分:1)
这里大概是我如何做到这一点(注意:未经测试,因为我的AD没有使用这个命名方案):
$samAccountName = 'smithjw'
$count = 2
if (Get-ADUSer $samAccountName -ErrorAction Silently Continue) {
while (Get-ADUser "$samAccountName$Count" -ErrorAction SilentlyContinue) {
$count++
}
#create "$samAccountName$count"
}
else {
#just create smithjw
}
答案 1 :(得分:1)
如果Get-AdUser
存在其他问题,则不涉及尝试捕获语句的解决方案。
$accountname = "account"
$count = $null
do{
$query = "(&(objectClass=user)(samaccountname=$accountname$count))"
$result = ([adsisearcher]$query).FindOne()
If($result){If($count -eq $null){$count = 2}Else{$count++}}
}While($result)
Write-Host "The account name you should use is: $accountname$count"
如果找不到对象, [adsisearcher]$query).FindOne()
将返回$null
。因此循环直到$result
为空/ null。我对$count
的处理方式不满意,但确实有效。如果有返回的用户,则会更改$count
。如果需要更改$count
。从2开始,我们需要检查它是否第一次设置变量。还有其他方法,但这是一致和可读的。 (我有一个使用Get-Variable
的想法,但它不必要地复杂化。)