#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.
Спасибо за помощь.