Перейти к содержимому

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

  • автор:

Каталог статей

В PowerShell есть команда Get-ADObject для работы с Active Directory.

Командлет Get-ADObject может не запускаться в Windows Server 2008 R2 или Windows 7 с установленным AdminPack, несмотря на то, что в документации по Microsoft написано, что он присутствует в данном дистрибутиве Windows.

При запуске Get-ADObject появляется ошибка:

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

+ CategoryInfo : ObjectNotFound: (Get-ADObject:String) [], CommandNotFoundException

На самом деле этот командлет есть в системе, и располагается он в инструменте «Active Directory Administration with Windows PowerShell» ( https://technet.microsoft.com/ru-RU/library/dd378937.aspx ).

Данный инструмент нормально работает как минимум в Power Shell v.2.

Чтобы этот командлет заработал, необходимо выполнить команду импорта модуля:

После этой команды все командлеты для управления доменом станут доступны. Доступны они будут только в текущем сеансе Windows Power Shell, поэтому в следующем сеансе Вам придётся заново делать импорт этого командлета.

Жизнь админа должна быть проще.

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

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

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

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

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

Get-ADUser -Filter | Foreach
Это сообщение посчитали полезным следующие участники:

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

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

Спасибо!
Знание — сила!

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

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

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

PS F:\Users\Администратор.IPIP> Get-ADUser -Filter | Foreach $_ -EmailAddress «$($_.samaccountname)@kamastretch.com»>
Имя «Get-ADUser» не распознано как имя командлета, функции, файла скрипта или выполняемой программы. Проверьте правильн
ость написания имени, а также наличие и правильность пути, после чего повторите попытку.
строка:1 знак:11
+ Get-ADUser <<<< -Filter | Foreach samaccountname)@kamastretch.com">
+ CategoryInfo : ObjectNotFound: (Get-ADUser:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

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

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

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

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

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

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

Get-Localuser admin

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

Name Enabled Description ---- ------- ----------- Admin True Встроенная учетная запись администратора компьютера/домена

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

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

$user = 'admin' try < Get-LocalUser $user -ErrorAction Stop | Out-Null write-host пользователь $user есть -foregroundcolor Green >Catch

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

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

(Get-LocalUser $user).enabled

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

$user = 'admin' if ((Get-LocalUser $user).enabled -eq "True") < write-host учетная запись включена -foregroundcolor Green >else

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

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

$user = 'admin' try < Get-LocalGroupMember -SID S-1-5-32-544 -Member $user -ErrorAction Stop | Out-Null write-host пользователь $user состоит в группе администраторы -foregroundcolor Green >Catch

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

if ((Get-LocalUser $user).PasswordExpires -eq $null) < write-host срок действия паролья не ограничен -foregroundcolor Green >else

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

new-LocalUser -User $user -password P@ssW0rD!

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

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

$password = convertto-securestring "P@ssW0rD!" -asplaintext -force

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

new-LocalUser -User $user -password $password -PasswordNeverExpires:$true -AccountNeverExpires:$true Add-LocalGroupMember -SID S-1-5-32-544 -Member $user

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

$user = 'admin' $password = convertto-securestring "P@ssW0rD!" -asplaintext -force try < Get-LocalUser $user -ErrorAction Stop | Out-Null cls write-host пользователь $user есть -foregroundcolor Green if ((Get-LocalUser $user).enabled -eq "True") < write-host учетная запись включена -foregroundcolor Green >else < write-host учетная запись отключена -foregroundcolor Red Enable-LocalUser $user write-host учетная запись включена -foregroundcolor Green >if ((Get-LocalUser $user).PasswordExpires -eq $null) < write-host срок действия паролья не ограничен -foregroundcolor Green >else < write-host срок действия пароля ограничен -foregroundcolor Red set-LocalUser $user -PasswordNeverExpires:$true write-host срок действия паролья не ограничен -foregroundcolor Green >try < Get-LocalGroupMember -SID S-1-5-32-544 -Member $user -ErrorAction Stop | Out-Null write-host пользователь $user состоит в группе администраторы -foregroundcolor Green >Catch < write-host пользователь $user не состоит в группе администраторы -foregroundcolor Red Add-LocalGroupMember -SID S-1-5-32-544 -Member $user write-host пользователь $user состоит в группе администраторы -foregroundcolor Green >> Catch

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

$user = 'admin1' $hash = "01000000d08c9ddf0115d1118c7a00c04fc297eb0100000048baf1b47a72d845b4eeda8659da9fd70000000002000000000010660000000100002000000004d2a3bf03aac92c2e172dc002d1fe8759da4655850462aface5c25f52921e05000000000e8000000002000020000000bfa652b6f7cc6845e3cee1831b54ab93dc272d0b2203024c3de8bc4789a2698a10000000923fb50dcf01125913534d0c1ba6d827400000002757df7d8a8b39c8e84b81323acff1d72419580a0022cf610926e5f081a2e895320088d482eb407f8157aad82f091abee7427b357e871d12238a8f74131238e7" $hash $password = ConvertTo-SecureString -String $hash $password new-LocalUser -User $user -password $password -PasswordNeverExpires:$true -AccountNeverExpires:$true Add-LocalGroupMember -SID S-1-5-32-544 -Member $user 

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

$Secure = Read-Host -AsSecureString $Secure $hash = ConvertFrom-SecureString -SecureString $Secure $hash

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

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

Get-LocalUser | Where-Object

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

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

Нужно получить список не отключенных учётных записей Windows Server 2012 в файл, только имена. В инете много написано на этот счёт, но или не то или не работает.

(0) ты нам нагло врешь, все работает!
ПоверШелл тебе в помощь
Get-LocalUser | where enabled -eq true | fl name
Get-aduser | where enabled -eq true | fl name
Либо вообще запросы ко всяким cimv
(6) ну это он точно не осилит

(5) PS C:\Users\Администратор> Get-LocalUser | where enabled -eq true | fl name
Get-LocalUser : Имя «Get-LocalUser» не распознано как имя командлета, функции, файла сценария или выполняемой программы
. Проверьте правильность написания имени, а также наличие и правильность пути, после чего повторите попытку.
строка:1 знак:1
+ Get-LocalUser | where enabled -eq true | fl name
+ ~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Get-LocalUser:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

(1) локальных

(5) PS C:\Users\Администратор> Get-aduser | where enabled -eq true | fl name

Командлет Get-ADUser в конвейере команд в позиции 1
Укажите значения для следующих параметров:
(Для получения справки введите «!?»)
Filter:

(10) Ой да поставь себе версию повершел нормальную. Хотя бы 5
https://docs.microsoft.com/ru-ru/powershell/

(10) перед тем как получить доменных узеров
Get-aduser -Filter * | where enabled -eq true | fl name
надо сделать это
import-module activedirectory

(11) спасибо, после обновления PS всё заработало

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

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