Powershell - 用户创建脚本避免重复的用户名

时间:2013-05-02 14:12:34

标签: powershell active-directory

我想使用powershell进行AD搜索,以发现我想要创建的用户名是否已被使用。如果它已经在使用中,我希望脚本在用户名和用户名上添加以下数字。

Import-Module ActiveDirectory
    $family= Mclaren
    $first= Tony
    #This part of the script will use the first 5 letters of $family and the first 2 letters of $first and join them together to give the $username of 7 letters
    $username = $family.Substring(0, [math]::Min(5, $family.Length)) + $first.Substring(0, [math]::Min(2, $first.Length)) 
  • 根据(用户名),用户名看起来像“ mclarto ” 取名字的5个首字母加上名字的2个字符 在AD中完成搜索。
  • 如果没有结果,“mclarto”将被视为$ username ,不带 最后的任何数字。
  • 如果搜索查找具有相同用户名的其他用户,则 用户名应该采用以下数字,在这种情况下它将是 的 “mclarto1”即可。
  • 如果“mclarto1”已经存在,则应使用“mclarto2”,依此类推。

David Martin已经提出的答案几乎就在那里,只有用户名不存在的部分,我不希望$ username包含一个数字,如果它是唯一的

由于

1 个答案:

答案 0 :(得分:2)

我认为这会让你接近,它会使用ActiveDirectory模块。

Import-Module ActiveDirectory

$family = "Mclaren*"

# Get users matching the search criteria
$MatchingUsers = Get-ADUser -Filter 'UserPrincipalName -like $family' 

if ($MatchingUsers)
{
    # Get an array of usernames by splitting on the @ symbol
    $MatchingUsers = $MatchingUsers | Select -expandProperty UserPrincipalName | %{($_ -split "@")[0]}

    # loop around each user extracting just the numeric part
    $userNumbers = @()
    $MatchingUsers | % { 
        if ($_ -match '\d+')
        {
            $userNumbers += $matches[0]
        }
    }

    # Find the maximum number
    $maxUserNumber = ($userNumbers | Measure-Object -max).Maximum

    # Store the result adding one along the way (probably worth double checking it doesn't exist)
    $suggestedUserName = $family$($maxUserNumber+1)
}
else
{
    # no matches so just use the name
    $suggestedUserName = $family
}

# Display the results
Write-Host $suggestedUserName