0

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

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”等等。

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

谢谢

4

1 回答 1

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
于 2013-05-02T15:03:36.733 回答