0

作成したいユーザー名が既に使用されているかどうかを確認するために、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 が一意の場合は番号を含めたくないという部分だけがあります。

ありがとう

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 に答える