Рейтинг:0

Как: если пользователь уже вышел, создайте пользователя с «1» после его имени — PowerShell Active Directory

флаг ug

У меня есть сценарий, написанный здесь, который проверяет, существует ли уже AD. Если они существуют, то скрипт сообщает мне об этом. Если нет, то он их создает:

    если (Get-ADUser -F { SamAccountName -eq $username }) {
        
        # Если пользователь существует, дать предупреждение
        Запись-предупреждение «Учетная запись пользователя с именем пользователя $username уже существует в Active Directory».
    еще {

##Затем продолжается создание пользователя

Что я хотел бы сделать, так это, если они существуют, создать пользователя с тем же соглашением об именах, но поставить «1» после его имени. Я знаю, это звучит глупо... но меня спрашивали, возможно ли это.

А если их нет, то продолжайте как обычно и создавайте их :)

Любая помощь будет оценена дамы и господа.

Спасибо :)

флаг br
[1] сделать запрос против вашего AD, чтобы узнать, есть ли кто-нибудь с этим основным именем пользователя. например - `-как 'SmithJ*'`. [2] заставляет результат быть массивом, заключая вызов в `@()`. [3] если `$Result.Count` не равен нулю, возьмите суффиксы цифр, отсортируйте, чтобы найти самый высокий, увеличьте на 1 и, наконец, используйте это число для создания нового имени пользователя.
Рейтинг:0
флаг in

Итак, во-первых, вам не нужно назначать свои значения из csv переменным, они уже загружены в объект и находятся в памяти, поэтому вы можете переключить $username на $user.username, повторите это для раздела добавления пользователя, просто измените имя после периода для набора данных. Я думаю, я вижу, что произошло, поэтому, если у вас есть john doe в системе и еще 2 john doe в вашем списке, в первый раз он создал john.doe1 и был успешным, но во второй раз это не удалось. Поэтому вам нужно вытащить строку имени пользователя, обрезать ее до последнего символа, выполнить сравнение, чтобы увидеть, является ли последний символ символом или цифрой. Если буква, то соедините 1, если число добавьте к нему 1 и вместо этого соедините это число. Есть смысл? На моем телефоне, поэтому писать код и исследовать синтаксис - это больно, извините.

флаг ug
Спасибо за ответ. Я собираюсь быть откровенно честным и сказать нет, это не имеет для меня особого смысла :(. Просто то, с чем мне никогда не приходилось возиться, поэтому достаточно смысла, чтобы написать это и заставить это функционировать, где я врезаться в стену
Aalom avatar
флаг in
Через несколько минут я сяду на ноутбук и попытаюсь собрать что-нибудь вместе, мне пришлось собрать сценарий AD, прежде чем, к сожалению, у меня нет доступа к исходному коду, который я написал.
флаг ug
Громадное спасибо!! P.S. Вы можете просто скопировать и вставить мой сценарий и добавить то, что вам нужно. Я ничуть не смущаюсь.
Рейтинг:0
флаг in

Я действительно не касался закомментированных частей, но, надеюсь, это дало вам представление. У меня не было удобного сервера AD, чтобы протестировать его, чтобы просто знать, что я не могу гарантировать его 100%

проверка функции ($ Пользователь) {
    если (Get-ADUser -F { SamAccountName -eq $User.username }) {
        $номер пользователя = 1
        в то время как (Get-ADUser -F { SamAccountName -eq ($User.username + $usernumber)}){
            $номер пользователя++
        }
        $NewUserName = $User.username + $usernumber
        Add_User($НовоеИмяПользователя, $Пользователь)
        }
        еще {
            $НовоеИмяПользователя = $Пользователь.имя_пользователя
        Add_User($НовоеИмяПользователя, $Пользователь)
        }
}

функция Add_User($Username, $User){
Новый ADUser `
            -SamAccountName $Имя пользователя `
            -UserPrincipalName "$Username" + "@MEtest.com" `
            -Name "$Имя $Фамилия" `
            -GivenName $User.Firstname `
            -Фамилия $User.Lastname `
            -Включено $True `
            -DisplayName "$User.Lastname, $User.Firstname" `
            -Путь $User.ou `
            -OfficePhone $User.telephone `
            -Title $User.jobtitle `
            -AccountPassword (преобразовать в защищенную строку $Password -AsPlainText -Force) -PasswordNeverExpires:$false -ChangePasswordAtLogon:$True
}

$ADUsers = Import-CSV C:\ps\usercreation.csv

$UPN = "METest.local"

foreach ($User в $ADUsers) {
    проверка ($ Пользователь)

        #Если этот пользователь существует
        Write-Host "Учетная запись пользователя $username создана." -Цвет переднего плана голубой
        
        #Время сна для синхронизации для push-уведомлений Exchange
        #write-host Приостановка синхронизации Exchange....
        #start-sleep -Секунды 300
    
    #Применить лицензии к пользователям, созданным в AD, а затем синхронизированным с Exchange
        #Set-MsolUserLicense -UserPrincipalName $newuser.UserPrincipalName -AddLicenses UI-OF-LICENSE-HERE   
        #Set-MsolUserLicense -UserPrincipalName $newuser.UserPrincipalName -AddLicenses UI-OF-LICENSE-HERE
        
    }
}

Read-Host -Prompt «Нажмите Enter, чтобы выйти»
флаг ug
Спасибо! :). К сожалению, я получил это :( --> New-ADUser: невозможно преобразовать «System.Object []» в тип «System.String», требуемый параметром «SamAccountName». Указанный метод не поддерживается. В строке: 18 символ: 29 + -SamAccountName $Username ` + ~~~~~~~~~ + CategoryInfo: InvalidArgument: (:) [New-ADUser], ParameterBindingException + FullyQualifiedErrorId: CannotConvertArgument,Microsoft.ActiveDirectory.Management.Commands.NewADUser
Aalom avatar
флаг in
Если вы только что запустили его на ISE, то в подсказке co.mand внизу введите $Username и посмотрите, что он возвращает.
флаг ug
Он возвращает это: PS C:\Windows\system32> $username Мистер Вонг. И это 1 из тестовых имен пользователей в моем файле .csv.
Aalom avatar
флаг in
Вероятно, вы можете добавить к нему исходящую строку для преобразования объекта в строку. Таким образом, -SamAccountName $Username ` станет -SamAccountName $Username | выходная строка `
флаг ug
Это ошибка, которую я получаю сейчас после замены -> https://i.stack.imgur.com/SXHyS.png
Aalom avatar
флаг in
У него проблемы с поиском свойства имени пользователя объекта csv, есть ли столбец имени пользователя? Как называется заголовок?
флаг ug
Привет @Аалом. Заголовки: «Имя | Фамилия | Имя пользователя | Пароль | JobTitle | OU | PhoneNumber
Aalom avatar
флаг in
Убедитесь, что все соответствующие свойства объекта написаны с учетом регистра. Таким образом, $User.username должно быть $User.UserName и т. д.
флаг ug
Я убедился, что все совпадает.Просто сделал лист Excel строчными, чтобы упростить тестирование на данный момент. Почему-то до сих пор получаю это https://i.stack.imgur.com/ZhPrc.png
Aalom avatar
флаг in
Убедитесь, что в строке 2 это $User.username, если имя переменной объекта — $User, а заголовок — теперь имя пользователя.
флаг ug
Привет Аалом. Еще раз большое спасибо за вашу постоянную помощь. Вы не представляете, как я ценю помощь. Я попробовал то, что вы сказали, все та же ошибка :(. Я прикреплю скриншот кода, .csv и ошибку в одном, так что, возможно, это будет иметь больше смысла для опытного глаза https://i.stack.imgur.com/xD43D.png
Aalom avatar
флаг in
Подождите, это создает учетные записи? Если да, то что произойдет, если вы снова запустите сценарий, не удаляя тестовые учетные записи? Исчезает ли ошибка и добавляется ли 1 к именам пользователей?
Aalom avatar
флаг in
Если это так, то возвращается ошибка, потому что учетная запись не существует в AD. Но в конечном итоге по-прежнему дает false компаратору и движется дальше. Чтобы удалить предупреждения, используйте -erroraction ignore после } оператора get-aduser.
Рейтинг:0
флаг in

В вашем выражении if с предупреждением просто добавьте

$имя_пользователя = $имя_пользователя + "1"

Затем повторите код в разделе else.

Всегда можно очистить его и поместить код создания учетной записи в функцию и вызвать его в каждой части оператора if.

флаг ug
Привет Аалом, спасибо за ваш ответ. Когда я помещаю "$username = $username + "1"" в оператор IF, это, кажется, не имеет большого значения. Он проходит через скрипт как надо, а в конце пишет ПРЕДУПРЕЖДЕНИЕ: пользователь с именем пользователя test.test1 уже существует в каталоге. И когда я ищу в AD, там нет никого с таким именем. Что мне нужно сделать, так это создать полную дублирующую учетную запись той, которая там есть, но просто «test.test1» вместо «test.test». Благодарим за помощь
Aalom avatar
флаг in
Убедились ли вы в том, что код выполняет add-aduser после изменения переменной $username? Я предполагаю, что вы работаете в какой-то петле, если да, то как это выглядит?
флаг ug
Привет снова, Я вставлю свой сценарий в ответ на сценарий, чтобы его было легче читать.
Рейтинг:0
флаг ug

##полный скрипт##

$ADUsers = Import-CSV C:\ps\usercreation.csv

$UPN = "METest.local"

foreach ($User в $ADUsers) {

    #Присвоить данные в csv переменной
    $имя_пользователя = $User.имя_пользователя
    $пароль = $пользователь.пароль
    $firstname = $User.firstname
    $lastname = $User.lastname
    $OU = $User.ou #Это поле относится к OU, в которой должна быть создана учетная запись пользователя
    $телефон = $Пользователь.телефон
    $jobtitle = $Пользователь.jobtitle

    #Проверить и убедиться, что пользователь уже существует в AD
    если (Get-ADUser -F { SamAccountName -eq $username }) {
        
        # Предупреждать, если пользователи уже существуют
        Запись-предупреждение «Учетная запись пользователя с именем пользователя $username уже существует в Active Directory».
    }
    еще {

        # Пользователь не существует, затем перейдите к созданию новой учетной записи пользователя.
        Новый ADUser `
            -SamAccountName $Имя пользователя `
            -UserPrincipalName "[email protected]" `
            -Name "$Имя $Фамилия" `
            -GivenName $Имя `
            -Фамилия $Lastname `
            -Включено $True `
            -DisplayName "$Фамилия, $Имя" `
            -Путь $OU`
            -OfficePhone $телефон `
            -Название $jobtitle `
            -AccountPassword (преобразовать в защищенную строку $Password -AsPlainText -Force) -PasswordNeverExpires:$false -ChangePasswordAtLogon:$True

        #Если этот пользователь существует
        Write-Host "Учетная запись пользователя $username создана." -Цвет переднего плана голубой
        
        #Время сна для синхронизации для push-уведомлений Exchange
        #write-host Приостановка синхронизации Exchange....
        #start-sleep -Секунды 300
    
    #Применить лицензии к пользователям, созданным в AD, а затем синхронизированным с Exchange
        #Set-MsolUserLicense -UserPrincipalName $newuser.UserPrincipalName -AddLicenses UI-OF-LICENSE-HERE   
        #Set-MsolUserLicense -UserPrincipalName $newuser.UserPrincipalName -AddLicenses UI-OF-LICENSE-HERE
        
    }
}

Read-Host -Prompt «Нажмите Enter, чтобы выйти»

P.S. не беспокойтесь обо всех комментариях ... они там, поэтому он не запускает определенные вещи, пока я тестирую

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.