如果dsquery找到相同的sAMAccountName,则会向Substring添加问题

时间:2015-12-01 10:10:23

标签: windows powershell active-directory

我正在编辑一个同事在他们离开之前创建的Powershell脚本,我认为这是在旧版本的Powershell / Activedirectoy上创建的。这是创建一个AD帐户,但我有一个问题,检查用户名是否已经存在,然后执行操作。

$UsernameInteger = 1
$sAMAccountName = $sn+$givenName.substring(0,$UsernameInteger)

# Check to see if the username is available in Active Directory
do
{
     if (dsquery user -samid $sAMAccountName)
     {
     $CreateUser = $False
     $UsernameInteger++
     $Username = $sn+$givenName.substring(0,$UsernameInteger)
     }

     Else

     {
     $CreateUser = $True
     }
}
Until ($CreateUser -eq $True)

当我使用同名帐户运行此代码时,出现以下错误:

Exception calling "Substring" with "2" argument(s): "Index and length must refer to a location within the string.
Parameter name: length"
At C:\AD Account Creation.ps1:43 char:5
+     $Username = $sn+$givenName.substring(0,$UsernameInteger)
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentOutOfRangeException

我想要的是当$createuser = $false然后它会将$givenName的下一个字母添加到$username并继续这样做,直到具有相同$sAMAccountName的帐户为止找不到,可以创建帐户。

我该怎么做呢?

1 个答案:

答案 0 :(得分:0)

您已将计数器增加到大于$givenName字符串长度的值。您需要将增量逻辑更改为:

if ($UsernameInteger -le $givenName.length) {
  $UsernameInteger++
}

如果您传入的用户名已经完整存在,那将无济于事,因此您还需要处理该方案