检查samaccount名称,如果存在,添加名字的下一个字母,再次检查 - 递归

时间:2014-01-19 01:13:24

标签: c# string powershell active-directory substring

想要构建一个帐户创建应用程序/脚本[范围未定的atm],并且如果samaccountname已经存在,则不确定如何处理它。 我想要发生的事情是,如果约翰史密斯已经拥有相同的帐户名称jsmith并且正在创建jane smith,则检测到jsmith,然后脚本检查jasmith,如果它存在,它将转到jansmith并且等等。

我甚至没有尝试过这种字符串操作,因为我真的不知道从哪里开始。

谢谢, JCGee

2 个答案:

答案 0 :(得分:1)

$FirstName = 'Jane';
$LastName = 'Smith';

for ($i = 1; $i -le $FirstName.Length; $i++) {
    $Account = $null;
    $Identity = $FirstName.Substring(0,$i) + $LastName;
    $Account = Get-ADUser -Identity $Identity;
    if ($Account -eq $null) {
        New-ADUser -SamAccountName $Identity -Name $Identity;
        break;
    };
}

答案 1 :(得分:1)

我有同样的问题,但我不想要任何PowerShell依赖

这是我用来创建AD用户的更传统的C#。搜索 UserPrincipal 以了解详情。

PrincipalContext ctx = new PrincipalContext(ContextType.Domain, domainName + ":389");
        string FirstName = "Jane";
        string LastName = "Smith";

        for (int i = 1; i <= FirstName.Length; i++)
        {
            string username = LastName + FirstName.Remove(i);
            UserPrincipal user = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, username);
            if ((object)user == null) //user doesn't exists
            {
                #region Add User
                try
                {
                    UserPrincipal userex = new UserPrincipal(ctx, username, password, true);
                    userex.GivenName = firstname;
                    userex.Surname = lastname;
                    userex.DisplayName = firstname + " " + lastname;
                    userex.ExpirePasswordNow();
                    userex.Description = _UserDescr;
                    userex.Save();
                    break;
                }
                catch
                {
                    //
                }
                #endregion
            }
        }