Имя учетной записи не более 20 символов

#powershell

Вопрос:

Мой сценарий извлек пользователей из электронной таблицы и создал их в AD.

 foreach ($user in $Contractors) {
    $name = $user.Name
    $SamA = $user.SamAcc
    $first = $user.First
    $last = $user.last
    $title = $user.Title
    $email = $user.email
    $PAWD = New-RandomPassword -CharacterSetCount 1, 1, 1, 2 #A nice password function I found and called above foreach
    $UPN = $user.UPN

     $ArgHash = @{
            Name                  = $name
            GivenName             = $first
            Surname               = $last 
            SamAccountName        = $SamA 
            AccountPassword       = $(ConvertTo-SecureString $PAWD -AsPlainText -Force) 
            ChangePasswordAtLogon = $True 
            DisplayName           = $name
            Enabled               = $True 
            Title                 = $title 
            Path                  = "<hidden>" 
            EmailAddress          = $email
            OfficePhone           = "<hidden>" 
            Manager               = "<hidden>"
            UserPrincipalName     = $UPN 
        }

        New-ADUser @ArgHash #create AD user
 

3 человека потерпели неудачу из-за того, что одно и то же имя счета содержит более 20 символов.
Теперь я знаю, что мне следовало проверить длину имени sAMAccountName.
Наш sAMAccountName-это формат first.last.

Лучшее, что я могу придумать, это создать функцию и использовать операторы if для создания имени sAMAccountName длиной 20 символов или меньше.

Что-то вроде этого.

 if ($SamA -gt 20) {
    if ($SamA first -gt 20 {
        $userfirst = $SamA.substring(0,10)
 

Какие-нибудь советы по разумному способу создания имени sAMAccountName, которое содержит 20 символов или меньше и содержит примерно 9 символов имени за точку, а затем 10 символов фамилии максимум?

Или

Есть ли где-нибудь предварительно созданная функция, которая управляет комбинациями имени и фамилии определенной длины? (Я искал и ничего не мог найти)

Комментарии:

1. Как вы справляетесь со случаем, когда выполнение усечения приведет к дублированию имени sAMAccountName?

2. @JeffZeitlin Хороший вопрос. Об этом я тоже не подумал. Мы не сталкивались с этой проблемой, так как мы небольшая компания, но я открыт для того, чтобы услышать.

3. Вам также нужно подумать о том, что произойдет, если имя или фамилия человека содержит меньше символов, чем вы ожидаете, так как подстрока может вызвать исключение за пределами.

4. @SantiagoSquarzon — небольшое экспериментирование показывает , что для любой строки $x $x = ($x[0..9] -join "") остаются строки определенной длины

5. @JeffZeitlin да, это решение проблемы, ОП использовал SubString метод, хотя это может привести к неожиданным броскам.

Ответ №1:

 $x, $x = ($x[0..9] -join "")
 

работает, но я только что узнал, что sAMAccountName будет автоматически создаваться с новым пользователем, и моей компании нужен только UPN.

Спасибо за помощь.