我正在编辑一个同事在他们离开之前创建的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
的帐户为止找不到,可以创建帐户。
我该怎么做呢?
答案 0 :(得分:0)
您已将计数器增加到大于$givenName
字符串长度的值。您需要将增量逻辑更改为:
if ($UsernameInteger -le $givenName.length) {
$UsernameInteger++
}
如果您传入的用户名已经完整存在,那将无济于事,因此您还需要处理该方案