Get aduser не распознано как имя командлета
Перейти к содержимому

Get aduser не распознано как имя командлета

Некоторые особенности PowerShell при работе с учетными записями пользователей

Я считал, что неплохо разбираюсь в powershell, но мне никогда не приходилось работать с учетными данными пользователей. Однако сейчас я в поиске работы и на одном из собеседований мне поставили тестовое задание написать скрипт, который должен был:

  1. Проверить наличие и статус (включена/отключена) учетной записи пользователя.
  2. Проверить включена ли учетная запись в группу «Администраторы»
  3. Если учетная запись отсутствует, то создать учетную запись и добавить ее в группу администраторы, проставить флаги «Запретить смену пароля пользователем» и «Срок действия пароля не ограничен»
  4. Если учетная запись существует, но отключена либо не входит в группу «Администраторы», то включить учетную запись и добавить ее в группу «Администраторы», проставить флаги «Запретить смену пароля пользователем» и «Срок действия пароля не ограничен»
  5. Скрипт не должен зависеть от языка операционной системы.

И тут же получил ошибку

Get-User : Имя «Get-User» не распознано как имя командлета, функции, файла сценария или выполняемой программы.

Немного опешив, от того, что такая полезная команда и не распознала я погуглил и обнаружил, что команда Get-User работает только в консоли Powershell для Exchange. Для работы с локальными пользователями необходимо использовать Get-Localuser, а для доменных Get-Aduser. Осознав свою ошибку, я вбил:

И получил ответ

Ну теперь проверить есть пользователь или нет, не составит большого труда, однако и тут меня ждал очередной подвох. Через условный оператор if else сделать это оказалось не так-то просто.

Дело в том, что если пользователь есть в системе, то на выход мы получаем не значение true, а целый набор данных, с именем, описанием пользователя, включена эта учетная запись или нет. А если пользователя нет, то powershell выдает ошибку. Побродив по просторам интернета, я обнаружил, что для этих целей лучше использовать оператор try сatch.

Я добавил переменную $user, чтобы было проще менять имена пользователя во всем скрипте. ErrorAction Stop необходим, чтобы скрипт не прервался на этом шаге из-за ошибки. Знак | разделяет шаги конвейера, а Out-Null скроет вывод текста ошибки. Так же я добавил вывод текста с подсветкой, для удобства проверки скрипта.

Далее я захотел проверить, включена или отключена учетная запись. Как я уже говорил, команда Get-LocalUser выдает целый набор данных и для проверки, мне нужно было выделить только один параметр Enabled со значением true или false. Для этого я воспользовался следующей командой:

Убедившись, что он работает, я сделал следующую проверку и добавил команду включения пользователя.

Для включения пользователя, естественно необходимо запускать консоль под правами администратора.

Во втором пункте задания, необходимо было определить входит ли пользователь в группу администраторов. Для проверки наличия пользователя в той или иной группе есть команда Get-LocalGroupMember. Однако имя группы администраторов, меняется от языка операционной системы. Поэтому мне пришлось воспользоваться стандартным SID S-1-5-32-544. Проверку я также сделал через try сatch.

В случае, если пользователь не состоит в группе, администраторов он будет в нее добавлен.
На следующем этапе, у меня стояла задача определить отключена настройка смены пароля у пользователя или нет. Тут я наткнулся на очередные подводные камни. Дело в том, что если у пользователя, срок действия пароля не ограничен, то параметр PasswordExpires не выдает никаких значений. А если эта галочка отключена, то у разных пользователей будет стоять разная дата смены пароля. Выход из этого положения я всё-таки придумал:

Дальше мне было необходимо создавать пользователя. Я никак не ожидал, что и здесь меня может ждать подвох. При создании пользователя командой

Не удается привязать параметр «Password». Не удается преобразовать значение «P@ssW0rD!» типа «System.String» в тип «System.Security.SecureString».

Дело в том, что параметр -password должен использовать SecureString, вместо обычной текстовой строки. Для этого я сделал переменную $password и сконвертировал её в securestring.

А сам скрипт по созданию пользователя и добавления его в группу администраторов

Готовый скрипт учитывающий все условия у меня получился таким образом:

Однако хранение пароля администратора в скрипте — это не лучшая практика с точки зрения безопасности. Для этого можно использовать хэш пароля, а не сам пароль.

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

Который запросит ввод пароля с клавиатуры.

И маленький бонус для вывода всех отключенных записей

Надеюсь, потраченное мною время поможет кому-то в работе. Да и для себя будет полезно не забыть этот бесценный опыт.

Get aduser не распознано как имя командлета

Сообщения: 2
Благодарности: 0

Необходим такой скрипт:
Для каждого пользователя Active Directory (включая вложенные OU) провести проверку на заполнение поля e-mail.
Если в этом поле уже есть хоть один символ, то пропускаем.
Иначе надо заполнить это поле по следующему принципу:
берем значение "user logon name" текущего пользователя и конкатенируем без пробела с константой "@mail.ru"

Большое спасибо всем откликнувшимся!

Сообщения: 1259
Благодарности: 861

Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Сообщения: 2
Благодарности: 0

Сообщения: 21
Благодарности: 0

не сработало. На контроллере домена создал файл ADfillemails.vbs , вставил в него эту строку.. ничего не произошло..

Windows PowerShell
(C) Корпорация Майкрософт, 2009. Все права защищены.

Термин Get-ADUser не распознается как имя командлета.

Я использовал следующий запрос, чтобы перечислить пользователей на сервере Windows 2008, но не смог и получил следующую ошибку.

Исключение приведено ниже . Может ли кто-нибудь помочь мне решить эту проблему?

Если присутствует модуль ActiveDirectory, добавьте

перед вашим кодом.

Чтобы проверить, существует ли, попробуйте:

Модуль ActiveDirectory по умолчанию присутствует в Windows Server 2008 R2, установите его следующим образом:

Чтобы он работал, вам нужен хотя бы один DC в домене, например Windows 2008 R2, и на нем установлены веб-службы Active Directory (ADWS).

Для Windows Server 2008 читайте здесь , как установить его

Проверьте здесь для того, как добавить ActiveDirectory модуля , если не существует по умолчанию. Это можно сделать на любом компьютере, и тогда это позволит вам получить доступ к вашему серверу «управления доменом» активного каталога.

РЕДАКТИРОВАТЬ

Чтобы предотвратить проблемы с устаревшими ссылками (я обнаружил, что в прошлом блоги MSDN исчезали без причины), по сути, для Windows 7 вам необходимо загрузить и установить Инструменты удаленного администрирования сервера (KB958830) . После установки выполните следующие действия:

  • Откройте Панель управления -> Программы и компоненты -> Включение / выключение компонентов Windows.
  • Найдите «Инструменты удаленного администрирования сервера» и разверните его.
  • Найдите «Инструменты администрирования ролей» и разверните его.
  • Найдите «AD DS и AD LDS Tools» и разверните его.
  • Установите флажок «Модуль Active Directory для Windows PowerShell».
  • Нажмите ОК и разрешите Windows установить эту функцию.

Версии Windows server уже должны быть в порядке, но если нет, вам необходимо загрузить и установить службу шлюза управления Active Directory . Если какая-либо из этих ссылок перестанет работать, вы все равно сможете найти статью базы знаний или загрузить имена и найти их.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *