The term 'Get-ADUser' is not recognized as the name of a cmdlet
I have used the following query to list the users in a windows 2008 server, but failed and got the below error.
The exception is given below. Can anyone help me to solve this?
8 Answers 8
If the ActiveDirectory module is present add
before your code.
To check if exist try:
ActiveDirectory module is default present in windows server 2008 R2, install it in this way:
For have it to work you need at least one DC in the domain as windows 2008 R2 and have Active Directory Web Services (ADWS) installed on it.
For Windows Server 2008 read here how to install it
Check [here] for how to add the activedirectory module if not there by default. This can be done on any machine and then it will allow you to access your active directory "domain control" server.
In essence, you need to download and install [Remote Server Administration Tools. After installing do the following steps:
- Open Control Panel -> Programs and Features -> Turn On/Off Windows Features
- Find "Remote Server Administration Tools" and expand it
- Find "Role Administration Tools" and expand it
- Find "AD DS And AD LDS Tools" and expand it
- Check the box next to "Active Directory Module For Windows PowerShell".
- Click OK and allow Windows to install the feature
Windows server editions should already be OK but if not you need to download and install the Active Directory Management Gateway Service. If any of these links should stop working, you should still be able search for the KB article or download names and find them.
Некоторые особенности PowerShell при работе с учетными записями пользователей
Я считал, что неплохо разбираюсь в powershell, но мне никогда не приходилось работать с учетными данными пользователей. Однако сейчас я в поиске работы и на одном из собеседований мне поставили тестовое задание написать скрипт, который должен был:
- Проверить наличие и статус (включена/отключена) учетной записи пользователя.
- Проверить включена ли учетная запись в группу «Администраторы»
- Если учетная запись отсутствует, то создать учетную запись и добавить ее в группу администраторы, проставить флаги «Запретить смену пароля пользователем» и «Срок действия пароля не ограничен»
- Если учетная запись существует, но отключена либо не входит в группу «Администраторы», то включить учетную запись и добавить ее в группу «Администраторы», проставить флаги «Запретить смену пароля пользователем» и «Срок действия пароля не ограничен»
- Скрипт не должен зависеть от языка операционной системы.
И тут же получил ошибку
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.
А сам скрипт по созданию пользователя и добавления его в группу администраторов
Готовый скрипт учитывающий все условия у меня получился таким образом:
Однако хранение пароля администратора в скрипте — это не лучшая практика с точки зрения безопасности. Для этого можно использовать хэш пароля, а не сам пароль.
Для того, чтобы получить хэш пароля можно воспользоваться следующим скриптом
Который запросит ввод пароля с клавиатуры.
И маленький бонус для вывода всех отключенных записей
Надеюсь, потраченное мною время поможет кому-то в работе. Да и для себя будет полезно не забыть этот бесценный опыт.
Sysadmin Still Surviving
While diagnosing some performance issues on a virtual machine, I decided to rebuild my Windows 7 VM. Reload, update (and update and update), and begin the process of reinstalling applications and tweaking preferences.
One of the applications I’ve grown accustomed to using is a small Powershell script that gives a brief list of stats on a user’s Active Directory account. It’s pretty handy for quickly figuring out if Bob forgot to reset his password or his account is now locked out from too many incorrect password attempts.
My old machine just ran the script without issues. The new one, however, wanted nothing to do with it.
![]() |
The term ‘Get-ADUser’ is not recognized as the name of a cmdlet, function, script file, or operable program. How annoying. |
- Click the start menu and search for «windows features», click on «Turn Windows features on or off»
- Expand Remote Server Administration Tools
- Expand Role Administration Tools
- Expand AD DS and AD LDS Tools
- Tick the checkbox for Active Directory Module for Windows Powershell
- Confirm that it’s okay to install the feature
1 comment:
Thank you for your post, this worked and saved me some time. You are a God among men.
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. Все права защищены.