Управление локальными пользователями и группами с помощью PowerShell. Список пользователей в powershell
PowerShell: Get-ADUser получение информации о пользователях Active Directory
Не секрет, что начиная с первой версии PowerShell, Microsoft пытается сделать из него основной инструмент администрирования Windows. И во многом это получается! Сегодня на простых примерах, мы покажем возможности PowerShell, которые можно использовать для получения различной информации о пользователях Active Directory и их атрибутах.
Примечание. Ранее для получения информации об атрибутах учетных записей пользователей AD приходилось использовать различные инструменты: консоль ADUC (в том числе сохраненные запросы AD), vbs скрипты, утилиту dsquery и т.п. Выбор инструмента обычно основывался на поставленной задачи и способностях администратора в программировании.В PowerShell 2.0 появился специальный модуль для работы с Active Directory — Active Directory Module for Windows PowerShell (представлен в Windows Server 2008 R2), командлеты которого позволяют выполнять различные манипуляции с объектами каталога AD. Для получения информации о пользователях домена Active Directory и их свойствах предназначен командлет Get-ADUser. С помощью командлета Get-ADUser можно получить значение любого атрибута существующей учетной записи пользователя в AD. Кроме того, можно указывать различные критерии выборки и формировать списки пользователей домена и их атрибутов.
В этом примере мы покажем, как с помощью командлета PowerShell Get-ADUser получить информацию, о том, когда последний раз менялся пароля пользователя и когда истекает срок его действия.
Запускаем окно Powershll с правами администратора и импортируем модуль Active Directory командой:
Import-Module activedirectoryСовет. В Windows Server 2012 и выше этот пункт можно пропустить, так как модуль PowerShell Active Directory подключен по-умолчанию.
В клиентских ОС (в той же Windows 10) для работы коммандера Get-AdUser нужно установить соответствующую версию RSAT и включить в панели управления компонент Active Directory Module for Windows PowerShell (Remote Server Administration Tools -> Role Administration Tools -> AD DS and AD LDS Tools -> AD DS Tools).
Полный список всех аргументов командлета Get-ADUser можно получить так:
help Get-ADUserЧтобы вывести список всех учетных записей домена, выполним команду:
Get-ADUser -filter *Важно. Не рекомендуется выполнять эту команду в доменах с большим количеством аккаунтов, т.к. возможно перегрузка контроллера домена, предоставляющего данные.
Формат возвращаемого списка не очень удобен для использования, выводится только некоторые основные 10 из более 120 атрибутов и свойств учетных записей пользователей (DN, SamAccountName, Name, SID, UPN и т.д) кроме того, мы видим, что информация о времени последней смены пароля отсутствует.
Чтобы вывести полную информации обо всех доступных атрибутах пользователя tuser, выполним команду:
Get-ADUser -identity tuser -properties *Итак, мы видим полный список атрибутов пользователя AD и их значений, ассоциированных с учетной записью пользователя. Далее мы перейдем к форматированию вывода командлета Get-ADUser, так, чтобы отображались нужные нам поля. Нас интересуют атрибуты:
- PasswordExpired
- PasswordLastSet
- PasswordNeverExpires
Выполним команду:
Get-ADUser tuser -properties PasswordExpired, PasswordLastSet, PasswordNeverExpiresТеперь в данных пользователя есть информация о дате смены пароля и времени, когда он просрочится. Представим информацию в более удобном табличном виде:
Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpiresЧтобы вывести данные пользователей из определенной OU, воспользуемся параметром SearchBase:
Get-ADUser -SearchBase ‘OU=Moscow,DC=winitpro,DC=loc’ -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpiresРезультат выполнения команды можно выгрузить в текстовый файл:
Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires > C:\temp\users.txtИли в CSV, который в дальнейшем будет удобно экспортировать в Excel (дополнительно с помощью sort-object отсортируем таблицу по столбцу PasswordLastSet , а также добавим условие where – имя пользователя должно содержать строку «Dmitry»):
Таким образом, можно построить таблицу с любыми необходимыми атрибутами пользователей Active Directory.
Совет. Для получения данных о компьютерах Active Directory используется командлет Get-ADComputer.Для получения списка учетных записей пользователей AD по определенному признаку используется параметр –Filter. В качестве аргументов этого параметра можно указать значение определённых атрибутов пользователей Active Directory, в результате командлет Get-ADUser будет применятся для пользователей, которые попадают под критерии фильтра.
Далее приведем еще несколько полезных вариантов запросов о пользователях Active Directory с помощью различных фильтров. Вы можете их комбинировать для получения необходимого списка пользователей AD:
Вывод пользователей AD, имя которых начинается с Roman:
Get-ADUser -filter {name -like "Roman*"}Список всех активных (не заблокированных) учетных записей в AD:
Get-ADUser -Filter {Enabled -eq "True"} | Select-Object SamAccountName,Name,Surname,GivenName | Format-TableСписок учетных записей с истекшим сроком действия пароля:
Get-ADUser -filter {Enabled -eq $True} -properties passwordExpired | where {$_.PasswordExpired}Список активных учеток с почтовыми адресами:
Get-ADUser -Filter {(mail -ne "null") -and (Enabled -eq "true")} -Properties Surname,GivenName,mail | Select-Object Name,Surname,GivenName,mail | Format-TableЗадача: для списка учетных записей, которые хранятся в текстовом файле (по одной учетке в строке) нужно получить телефон пользователя в AD и выгрузить информацию в текстовый csv файл (можно легко импортировать в Esxel).
Import-Csv c:\ps\usernsme_list.csv | ForEach { Get-ADUser -identity $_.user -Properties Name, telephoneNumber | Select Name, telephoneNumber | Export-CSV c:\ps\export_ad_list.csv -Append -Encoding UTF8 }Следующий пример позволяет выгрузить адресную книгу предприятия в виде csv файла, который в дальнейшем можно импортировать в Outlook или Mozilla Thunderbird:
Пользователи, которые не меняли свой пароль в течении последних 90 дней:
$90_Days = (Get-Date).adddays(-90) Get-ADUser -filter {(passwordlastset -le $90_days)}Чтобы получить фотографию пользователя из Active Directory и сохранить ее в jpg файл:
$user = Get-ADUser winadmin -Properties thumbnailPhoto $user.thumbnailPhoto | Set-Content winadmin.jpg -Encoding byteСписок групп, в которых состоит учетная запись пользователя
Get-AdUser winadmin -Properties memberof | Select memberof -expandproperty memberofwinitpro.ru
Получение списка пользователей в группе AD и выгрузка в CSV
В этой статье мы рассмотрим несколько примеров использования PowerShell для получения списка пользователей в различных группах Active Directory. Данная статья должна научить вас получать список учетных записей определенной группы AD и экспортировать полученный список пользователей с различными атрибутами в CSV файл, с которым удобно работать в Excel.
Ранее для построения списка пользователей в группах Active Directory приходилось использовать скрипты VBScript, или утилиты командной строки DSQuery или CSVDE, недостаточно гибкие и удобные.
Для взаимодействия с AD Microsoft разработала специальный модуль Active Directory Module для Windows PowerShell. Впервые данный модуль появился в Windows Server 2008 R2 и для его использования нужно сначала его загрузить в вашу сессию PowerShell командой:
Import-Module ActiveDirectory
В Windows Server 2012 / R2 / Windows Server 2016 этот модуль автоматически устанавливается и загружается при установке на сервере роли ADDS (Active Directory Domain Services), т.е. при повышении сервера до контроллера домена.
В настольных пользовательских операционных системах (Windows 10 / 8 / 7) модуль Active Directory для Windows PowerShell входит в состав RSAT, который нужно скачать, устанавливать и активировать модуль для работы с AD отдельно.
Обратите внимание, что для использования в сессии PowerShell модуля ActiveDirectory не обязательно иметь права администратора домена. Получить информацию о пользователях и группах из AD может любой аутентифицированный пользователь домена.
Для получения информации об учетных записях, которые входят в группу безопасности Active Directory используется командлет Get-ADGroupMember.
Например, чтобы вывести на экран список членов группы Domain Admins, нужно выполнить команду:
Get-ADGroupMember 'Domain Admins'
В том случае, если вы не знаете точного имени группы, можно вывести список всех групп в AD с помощью команды:
Get-ADGgroup -filter * | sort name | select Name
Чтобы отобразить только имена пользователей в группе:
Get-ADGroupMember -Identity 'Domain Admin'| ft name
Если в указанной группе содержатся другие группы AD, для вывода членов группы с учетом вложенных групп нужно использовать параметр Recursive .
Get-ADGroupMember -Identity ‘Domain Admin’ -Recursive | ft name
Переключатель –recursive предписывает команде get-adgroupmember получать список пользователей из каждой вложенной группы и выводить только объекты, не являющиеся контейнерами (пользователей или компьютеры). Т.е. данная команда отобразит даже тех пользователей, которые напрямую не входят в группу.
Можно вывести более подробную информацию об учетных записях в данной группе таким образом:
Get-ADGroupMember -Identity ‘Domain Admin’ | foreach { Get-ADUser $_ -Properties * }
Рассмотрим более сложную конструкцию PowerShell, которая позволяет вывести всех членов определённой доменной группы безопасности с информацией о компании, подразделении и должности с последующей сортировкой и разбивкой на блоки с зависимости от конкретного аттрибута (допустим нам нужно сгруппировать пользователей по полю Компания — company ):
Get-ADGroupMember -Recursive ‘Domain Admin’ | ForEach {Get-ADUser -filter {samaccountname -eq $_.SamAccountName} -Properties displayName, company, title, department} | Sort-Object company,displayName | Format-Table displayName,company,department,title -GroupBy company -AutoSize
Для выгрузки полученного списка в текстовый файл в конце предыдущей команды нужно добавить конвейер:
| Out-File -Width 4000 "C:\TxT\GetUsersADGroupByCompany.txt"
Для выгрузки списка пользователей группы в CSV файл нужно добавить такой конвейер:
| Export-Csv -NoTypeInformation .\GetUsersADGroupByCompany.csv -Encoding Unicode
Можно посчитать общее количество пользователей в группе:
(Get-ADGroupMember -Identity 'Domain Admin').Count
Еще один полезный пример. Попробуем найти все группы AD содержащие в имени шаблон *Manager*, и выведем пользователей, которые входят в эти группы. Чтобы выводить только уникальные объекты, воспользуемся аргументом -uniq.
Get-ADGroup -filter 'SamAccountName -like "*Manager*"' | Get-ADGroupMember -recursive|Select-Object -uniq
Если при выполнении команды Get-ADGroupMember появится ошибка:
Get-ADGroupMember : The specified directory service attribute or value does not exist
Значит в состав группы входят пользователи из других лесов. Командлет Get-ADGroupMember не поддерживает работу с пользователями из разных лесов AD.
Для добавления пользователей в группы AD нужно использовать командлет Add-ADGroupMember.
Как выгрузить список пользователей из AD через PowerShell
Сегодня мы попробуем выгрузить список все пользователей в отдельный файл из Active Directory. Главным помощником в этом деле у нас будет PowerShell. Всё дело в том, что Microsoft изначально планировала командную консоль PowerShell как основной инструмент для управления серверными компонентами Windows. И на сегодняшний день, когда мы имеем уже версию 2.0, по большому счету, это так и есть.
Ещё в недалеком прошлом, чтобы хоть как-то взаимодействовать с AD, администраторам необходимо было иметь в своем распоряжении либо утилиту dsquery, либо разного рода скрипты или утилиты. Сегодня же начиная с версии Windows Server 2008 R2, мы можем работать с AD через PowerShell. С приходом PowerShell 2.0 для взаимодействия с Active Directory используется специальный модуль Active Directory Module for Windows PowerShell, который содержит в себе необходимый список командлетов. Для наших задач мы будем использовать команду Get-ADUser.
Итак, в зависимости под управлением какой операционной системы мы будем запускать консоль PowerShell, нам необходимо будет выполнить “подготовительные действия”.
1) Если мы работаем из-под Windows Server до версии 2012, то нам необходимо выполнить команду:
- Import-Module activedirectory – команда для импортирования модуля в AD
Для версий операционной системы от 2012 и выше, данный модуль уже включен по умолчанию.
2) Если мы работаем из под любой клиентской Windows, то на ней должен быть установлен пакет удаленного администрирования RSAT, с проинсталлированным компонентом Active Directory Module for Windows PowerShell.
Стоит отметить, что командлет Get-ADUser рекомендуется выполнять при количестве выгружаемых данных до 1000 пользователей.
Экспортируем пользователей AD при помощи PowerShell в отдельный файл
Для начала вызовем справку для команды Get-ADUser. В результате Вы получите все необходимые команды для дальнейшего администрирования.
- help Get-ADUser – команда для вызова справки
Чтобы получить в окне PowerShell список всех пользователей со всеми свойствами, необходимо выполнить следующую команду:
- Get-ADUser -filter * – экспорт списка пользователей AD
Данная выгрузка не совсем информативна и не умещает в окне всю необходимую информацию. Поэтому попробуем сузить поиск и выведем свойства конкретного пользователя с именем user1:
- Get-ADUser -identity user1 -properties * – экспорт свойств определенного пользователя
А теперь попробуем экспортировать список всех пользователей с их свойствами во внешний txt или csv файл:
- Get-ADUser -filter * -properties * | Export-csv -path c:\users.csv -encoding Unicode – экспорт пользователей в отдельный файл
Хотелось бы обратить отдельное внимание на ключ -encoding Unicode. Он служит для того, чтобы русская кириллица, после экспорта из AD, могла корректно отображаться в выгруженном файле. Например, через Microsoft Excel мы увидим вопросительные знаки вместо русских букв.
При просмотре файла данные экспортируются в одну строку и тем самым не пригодны для чтения. Чтобы это изменить, нам необходимо выполнить следующие действия:
- Выделяем в Экселе первый столбец, как показано на скринщоте.
- Откроем вкладку данные > Текст по столбцам. И в окне мастера выберем параметр – С разделителями.
- В следующем окне выберем в качестве разделителя Запятую и нажмем > Далее.
В итоге получаем вполне себе читаемый csv файл, в котором каждое свойство пользователя разбито на отдельные столбцы.
Нужна помощь в работе с Active Directory?
Предлагаем услуги по обслуживанию серверов на разных условиях:
+7 (965) 254-83-24
self-it.ru
Извлечение списка пользователей AD в CSV (с помошью PowerShell)
Существует несколько относительно честных способов получить список пользователей подразделения AD в CSV. В данном примере рассмотрим один из них, скрипт PowerShell по получению списка пользователей AD:
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher$objSearcher.SearchRoot = "LDAP://ou=Users,ou=Departmets,dc=test,dc=ru"$objSearcher.Filter = "(&(objectCategory=person)(!userAccountControl:1.2.840.113556.1.4.803:=2))"$users = $objSearcher.FindAll()# Количество учетных записей$users.Count $users | ForEach-Object { $user = $_.Properties New-Object PsObject -Property @{ Должность = [string]$user.description Отдел = [string]$user.department Логин = [string]$user.userprincipalname Телефон = [string]$user.telephonenumber Комната = [string]$user.physicaldeliveryofficename ФИО = [string]$user.cn }} | Export-Csv -NoClobber -Encoding utf8 -Path d:\list_users.csv
Как видно из скрипта все что нужно сделать это вписать необходимое подразделение, в данном примере это Users в подразделении Departments в домене test.ru. Ниже описаны поля которые мы хотим выгрузить в CSV, а в самом конце путь где будет сохранен файл d:\list_users.csv
Внимание!!! данный скрипт не отобразит более 1000 пользователей.
Для тех кто на- вы с Excel, распишу как добиться нормальной таблицы. Открываем в Excel (в данном примере буду использовать версию 2010)файл list_users.csv, выделяем первый столбец (путем нажатия на А), затем заходим во вкладку "Данные" и нажимаем "Текст по столбцам". Выбираем "с разделителями" и нажимаем "Далее".
После этого в Символе разделителе выбираете- запятая, нажимаем "Далее"
и кнопку "Готов".
В результате получаете таблицу с пользователями подразделения.
Я очень надеюсь, моя статья помогла Вам! Просьба поделиться ссылкой с друзьями:
pk-help.com
Управление группами AD с помощью PowerShell
В этой статье мы рассмотрим возможности PowerShell по управлению группами домена Active Directory. Мы рассмотрим, как создать новую группу в AD, добавить в нее пользователей (или удалить), вывести список пользователей группы и несколько других полезных действия с доменными группами, которые чрезвычайно полезны при повседневном администрировании. Для управления группами AD в модуле PowerShell для Active Directory имеются следующие основные командлеты:
Для использования данных командлетов в вашей сессии PowerShell должен быть загружен специальный модуль взаимодействия с AD — Active Directory Module for Windows PowerShell. Данный модуль впервые был представлен в Windows Server 208 R2. В Windows Server 2012 и выше этот модуль включен по умолчанию. На клиентских компьютерах его можно установить и включить в качестве одного из компонентов RSAT. Проверить, загружен ли модуль можно так:
Get-Module -Listavailable
Как вы видите, модуль ActiveDirectory загружен. Если нет – импортируйте его командой:
Import-Module activedirectory
Полный список команд модуля можно получить так:
Get-Command -Module ActiveDirectory
В модуле всего доступно 147 командлетов, из которых с группами могут работать 11.
Get-Command -Module ActiveDirectory -Name "*Group*"
Вот их список:
- Add-ADGroupMember
- Add-ADPrincipalGroupMembership
- Get-ADAccountAuthorizationGroup
- Get-ADGroup
- Get-ADGroupMember
- Get-ADPrincipalGroupMembership
- New-ADGroup
- Remove-ADGroup
- Remove-ADGroupMember
- Remove-ADPrincipalGroupMembership
- Set-ADGroup
New-ADGroup – создаем новую группу AD
Создадим новую группу в указанном контейнере (OU) Active Directory с помощью команды New-ADGroup:
New-ADGroup "TestADGroup" -path 'OU=Groups,OU=Moscow,DC=corp,dc=winitpro,DC=ru' -GroupScope Global -PassThru –Verbose
С помощью атрибута Description можно задать описание группы, а с помощью DisplayName изменить отображаемое имя.
Параметром GroupScope можно задать один из следующих типов групп:
- 0 = DomainLocal
- 1 = Global
- 2 = Universal
Создать группу распространения можно так:
New-ADGroup "TestADGroup-Distr" -path 'OU=Groups,OU=Moscow,DC=corp,dc=winitpro,DC=ru' -GroupCategory Distribution -GroupScope Global -PassThru –Verbose
Add-AdGroupMember – добавить пользователей в группу AD
Добавить пользователей в группу Active Directory можно с помощью командлета Add-AdGroupMember. Добавим в новую группу двух пользователей:
Add-AdGroupMember -Identity TestADGroup -Members user1, user2
Если список пользователей, которых нужно добавить в группу довольно большой, можно сохранить список учетных записей в CSV файл, затем импортировать данный файл и добавить каждого пользователя в группу.
Формат CSV файла такой (список пользователей по одному в строке, имя столбца – users)
Import-CSV .\users.csv -Header users | ForEach-Object {Add-AdGroupMember -Identity ‘TestADGroup’ -members $_.users}
Чтобы получить всех членов одной группы (groupA) и добавить их в другую группу (groupB), воспользуйтесь такой командой:
Get-ADGroupMember “GroupA” | Get-ADUser | ForEach-Object {Add-ADGroupMember -Identity “Group-B” -Members $_}
В том случае, если нужно скопировать в новую группу и членов всех вложенных групп (рекурсивно), нужно воспользоваться такой командой:
Get-ADGroupMember -Identity “GroupA” -Recursive | Get-ADUser | ForEach-Object {Add-ADGroupMember -Identity “GroupB” -Members $_}
Remove-ADGroupMember – удалить пользователей из группы
Для удаления пользователей из группы AD нужно использовать командует Remove-ADGroupMember. Удалим из группы двух пользователей:
Remove-ADGroupMember -Identity TestADGroup -Members user1, user2
Подтвердите удаление пользователей из группы:
Если нужно удалить из группы пользователей по списку из CSV файла, воспользуйтесь такой командой:
Import-CSV .\users.csv -Header users | ForEach-Object {Remove-ADGroupMember -Identity ‘TestADGroup’ -members $_.users}
Get-ADGroup – получить информацию о группе AD
Получить информацию о группе поможет командлет Get-ADGroup:
Get-ADGroup 'TestADGroup'
Даная команда выводит информацию об основных атрибутах группы (DN, тип группы, имя, SID). Чтобы вывести значение всех атрибутов группы домена AD, выполните такую команду:
Get-ADGroup 'TestADGroup' -properties *
Как вы видите, теперь стали отображаться такие атрибуты, как время создания и модификации группы, описание и т.д.
С помощью командлета Get-ADGroup можно найти все интересующие вас группы по определенному шаблону. Например, нужно найти все группы AD, в имени которых содержится фраза admins :Get-ADGroup -LDAPFilter “(name=*admins*)” | Format-Table
Get-ADGroupMember – вывести список пользователей группы AD
Вывести на экран список пользователей группы:
Get-ADGroupMember 'TestADGroup'
Чтобы оставить в результатах только имена пользователей, выполните:
Get-ADGroupMember 'TestADGroup'| ft name
Если в данную группу включены другие группы домена, чтобы вывести полный список членов, в том числе всех вложенных групп, воспользуйтесь параметром Recursive.
Get-ADGroupMember ‘server-admins' -recursive| ft name
Чтобы выгрузить список учетных записей, состоящих в определённой группе в CSV файл (для дальнейшего использования в Excel), выполните такую команду:
Get-ADGroupMember ‘server-admins' -recursive| ft samaccountname| Out-File c:\ps\admins.csv
Чтобы добавить в текстовый файл данные учетных записей пользователей в AD, воспользуемся командлетом Get-ADUser. Например, помимо учетной записи нужно вывести должность и телефон пользователя группы:
Get-ADGroupMember -Identity ’server-admins’ -recursive| foreach { Get-ADUser $_ -properties title, OfficePhone|Select-Object title, OfficePhone }
Посчитать количество пользователей в группе можно так:
(Get-ADGroupMember -Identity 'domain admins').Count
Оказалось, что в группе «domain admins» у нас состоит 7 учетных записей администраторов.
Чтобы найти список пустых групп в определенном OU, воспользуйтесь такой командой:
Get-ADGroup -Filter * -Properties Members -searchbase “OU=Moscow,DC=corp,dc=winitpro,DC=ru” | where {-not $_.members} | select Name
winitpro.ru
Получение пользователей группы AD из PowerShell
Для начала нам необходимо убедиться, что у нас установлена фича сервера для работы с AD из PowerShell. Сделать это достаточно легко:get-module -ListAvailable
И если вы не видите модуля ActiveDirectory, то его придется установить:
Import-Module ServerManagerAdd-WindowsFeature RSAT-AD-PowerShellПосле это го в список модулей должен выглядеть как то так:PS C:\Windows\system32> get-module -ListAvailable
ModuleType Name ExportedCommands ---------- ---- ---------------- Manifest ActiveDirectory {} Manifest ADRMS {}
Вот, собственно после этого и начинается написание скрипта:
Import-Module ActiveDirectory#получить информацию о доменеGet-ADDomain#получаем информацию о группе$group = Get-AdGroup <имя группы без кавычек, например: Administrators>#получаем пользователей из выбранной группыGet-ADUser -Filter {MemberOf -recursivematch $group.DistinguishedName}
Согласитесь достаточно просто? Причем, я не являюсь администратором домена, на доступном мне сервере нет контроллера домена, но все работает.Кстати, никто нам не мешает, посмотреть по пользователю любые свойства доступные в AD. Например:Get-ADUser -Filter {Surname -eq 'Лосев'} -properties * | Select CN, Created
CN Created -- ------- Лосев Алексей Юрьевич 08.08.2011 14:55:04Как то вот так.
losev-al.blogspot.com
Управление локальными пользователями и группами с помощью PowerShell
Относительно недавно Microsoft добавила в Windows стандартный PowerShell модуль для управления локальными пользователями и группами под названием Microsoft.PowerShell.LocalAccounts. Ранее этот командлет нужно было качать и импортировать в PowerShell отдельно. В Windows Server 2016 и Windows 10 модуль LocalAccounts теперь доступен по умолчанию, т.к. он входит в состав PowerShell 5.1. В более ранние версии Windows для использования модуля управления локальными аккаунтами нужно установить Windows Management Framework 5.1.
Модуль LocalAccounts
Всего в модуль входит 15 командлетов. Полный список командлетов в модуле LocalAccounts можно вывести так:
Get-Command -Module Microsoft.PowerShell.LocalAccounts
- Add-LocalGroupMember – добавить пользователя в локальную группу
- Disable-LocalUser – отключить локальную учетную запись
- Enable-LocalUser – включить учетную запись (разблокировать)
- Get-LocalGroup – получить информацию о локальной группе
- Get-LocalGroupMember – получить список пользователей в локальной группе
- Get-LocalUser – получить информацию о локальном пользователе
- New-LocalGroup – создать новую локальную группы
- New-LocalUser – создать пользователя
- Remove-LocalGroup – удалить группу
- Remove-LocalGroupMember – удалить члена из группы
- Remove-LocalUser – удалить локального пользователя
- Rename-LocalGroup – переименовать группу
- Rename-LocalUser – переименовать пользователя
- Set-LocalGroup – изменить группу
- Set-LocalUser – изменить пользователя
Далее рассмотрим несколько типовых задач по управлению локальными пользователями и группами на компьютере с Windows 10 при помощи PowerShell командлетов из состава модуля LocalAccounts.
Управление локальными пользователями Windows с помощью PowerShell
Выведем список имеющихся на компьютере локальных пользователей Windows:
Get-LocalUser
Как вы видите, на компьютере имеется 7 локальных учетных записей, 3 из которых отключены (Enabled=False).
Чтобы вывести все свойства конкретной локальной учетной записи (аналог комадлета для получения иформации о пользователях из AD — Get-ADUser), выполните:
Get-LocalUser -Name ‘root’ | Select-Object *AccountExpires :Description :Enabled : TrueFullName :PasswordChangeableDate : 4/23/2018 11:23:48 PMPasswordExpires :UserMayChangePassword : TruePasswordRequired : FalsePasswordLastSet : 4/22/2018 11:23:48 PMLastLogon : 7/15/2018 9:04:32 PMName : rootSID : S-1-5-21-3650440056-3766451173-3310994491-1001PrincipalSource : LocalObjectClass : User
Чтобы получить конкретный атрибут пользователя, например, время последней смены пароля, выполните:
Get-LocalUser -Name ‘root’ | Select-Object PasswordLastSet
Создадим нового локального пользователя с помощью командлета New-LocalUser. Данный командлет позволяет создать следующие типы учетных записей:
- Локальные учетных записи Windows
- Учетные записи Microsoft
- Учетные записи Azure AD
При создании учётной записи пользователя с помощью New-LocalUser нельзя указывать ее пароль в качестве аргумента Password в открытом виде. Предварительно пароль нужно сконвертировать в безопасную строку, запросив пароль интерактивно:
$UserPassword = Read-Host –AsSecureString
Или указав пароль непосредственно в консоли PoSh:
$UserPassword = ConvertTo-SecureString "Pa$$word!!" -AsPlainText -Force
New-LocalUser "SIvanov" -Password $UserPassword -FullName "Sergey Ivanov" -Description "Local Account dlya udalennogo vhoda"
Для создания пользователя в домене AD нужно использовать командлет New-ADUser.Чтобы изменить пароль пользователя, воспользуйтесь командой Set-LocalUser (предполагаем, что вы уже преобразовали новый пароль в SecureString):
Set-LocalUser -Name sivanov -Password $UserPassword –Verbose
Чтобы установить флаг «Срок действия пароля пользователя не истекает» («Password never expired»), выполните:
Set-LocalUser -Name sivanov –PasswordNeverExpires $False
Как видите, вам не нужно преобразовывать значение UserAccountControl, как при управлении свойствами учётной записи в AD.
Как вы помните, вы можете авторизоваться в Windows 10 под учетными записями Microsoft. Если нужно создать нового пользователя, связанного с аккаунтом Microsoft, выполните следующую команду (обратите внимание, что пароль аккаунта указывать не нужно, т.к. он хранится в Microsoft).
New-LocalUser -Name "MicrosoftAccount\[email protected]" -Description "Это учетка в Microsoft"
Для создания локальной учётной записи, которая связана с вашим аккаунтом в Azure AD (например, вы пользуетесь Office 365), выполните команду:
New-LocalUser -Name "AzureAD\[email protected]" -Description "Это учетка в Azure AD"
Чтобы удалить этого локального пользователя, выполните:
Remove-LocalUser -Name sivanov -Verbose
Управление локальными группам Windows с помощью PowerShell
Теперь выведем список локальных групп на компьютере:
Get-LocalGroup
Создадим новую группу:
New-LocalGroup -Name 'RemoteSupport' -Description 'Remote Support Group'
Теперь добавим в новую группу несколько локальных учетных записей и группу локальных администраторов:
Add-LocalGroupMember -Group 'RemoteSupport' -Member ('SIvanov','root', 'Администраторы') –Verbose
Если ваш компьютер входит в домен, то вы можете добавить в локальную группы и доменные аккаунты или группы. Для этого их нужно указывать в формате DomainName\user2 или DomainName\’domain admins’.
Также вы можете добавить пользователя в группы с помощью следующего конвейера (добавим пользователя в локальные администраторы):
Get-Localuser -Name 'sivanov' | Add-LocalGroupMember -Group 'Administrators'
Выведем список пользователей в локальной группе:
Get-LocalGroupMember -Group 'RemoteSupport'
Как вы видите, мы используем только локальные учетные записи (PrincipalSource – Local). Однако здесь могут быть доменные аккаунты (domain), учетные записи Microsoft (MicrosoftAccount) и аккаунты из Azure (AzureAD).
Чтобы вывести список групп, в которых состоит конкретный пользователь, придется перебрать все локальные группы на компьютере:
foreach ($LocalGroup in Get-LocalGroup){if (Get-LocalGroupMember $LocalGroup -Member 'sivanov' –ErrorAction SilentlyContinue){$LocalGroup.Name}}
Чтобы убрать пользователя из группы, выполните:
Remove-LocalGroupMember -Group 'RemoteSupport' –Member 'sivanov'
Для управления локальными пользователями на удаленном компьютере нужно сначала подключится к нему через WinRM командлетами Invoke-Command или Enter-PSSession.
Например, нам нужно собрать список учетных записей в локальной группе на удаленных компьютерах:
$s = new-pssession -computer pc01,pc02,pc03invoke-command -scriptblock {Get-LocalGroupMember -Group 'RemoteSupport'} -session $s -hidecomputername | select * -exclude RunspaceID | out-gridview -title "LocalAdmins"
winitpro.ru