创建新的AD用户和计数(如果找到)

时间:2014-12-23 16:16:26

标签: powershell active-directory

我正在尝试实施一个脚本来帮助自动创建帐户。它将为用户查询AD,如果找到,则在末尾添加一个数字,然后执行另一个查询。再次,如果找到,请更改数字,例如2 - 3.

例如,如果以下用户已在AD中:

  • Smith,James W = SmithJW
  • Smith,Jason W = SmithJW2

我想添加一个新用户,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”,然后添加计数器。

希望这是有道理的。感谢。

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的想法,但它不必要地复杂化。)