Advanced active directory replication and topology management using windows powershell (level 200)

Работа с объектами

Так как PowerShell работает с объектами, он позволяет выполнять некие действия над этими объектами, например:

  • Measure-Object – командлет позволяет рассчитывать на основе свойств объектов такие числовые агрегирующие параметры как: минимальное, максимальное, среднее значение, сумму и количество. Например, Вы хотите узнать максимальный или средний размер файла в определенном каталоге, или просто узнать количество файлов (запущенных процессов, служб и так далее);
  • Select-Object – с помощью данного командлета можно выбрать определенные объекты или свойства этих объектов, например Вы хотите выводить только название файла и его размер;
  • Sort-Object — сортирует объекты по значениям свойств;
  • Where-Object – командлет для того чтобы ставить условие для выборки объектов на основе значений их свойств;
  • Group-Object – группирует объекты, которые содержат одинаковое значение для заданных свойств;
  • ForEach-Object – перебор объектов с целью выполнения определенной операции над каждым из этих объектов.

Как PowerShell может помочь работе с Office 365

ключевых факторов

  • PowerShell для Office 365 показывает дополнительную информацию, которую вы не можете увидеть в центре администрирования Microsoft 365;
  • PowerShell позволяет настраивать функции и параметры, недоступные в центре администрирования Office 365;
  • Если вы используете Office 365 для обмена файлами, PowerShell для Office 365 позволит быстро выполнять проверку и управлять доступом пользователей к общим дискам;
  • Через командную строку вы можете легко выполнять массовые операции;
  • В PowerShell для Office 365 вы можете использовать командлеты для фильтрации данных, полученных из вашей системы Office 365. Таким образом вы получите быстрый доступ к информации о пользователях и системах;
  • Его также можно использовать для автоматизации процесса сбора данных из Office 365 и их выгрузки в CSV-файл;
  • Благодаря возможности быстро проверять информацию о пользователях PowerShell является мощным инструментом для мониторинга и повышения кибербезопасности.

PowerShell помогает расширить возможности по управлению Office 365инструментов PowerShellинтегрированную среду разработки сценариев PowerShell (ISE)

Получение информации

1. Список всех групп

Без фильтра:

Get-AdGroup -filter *

С фильтром:

Get-AdGroup -filter * | Where {$_.name -like «*free*»} | fl name

* будут выбраны все группы, в названии которых встречается free.

2. Подробная информация о группе

Get-ADGroup «Domain Users» -Properties *

* где ключ -Properties * покажет информацию о всех атрибутах группы.

Показать только SID и GUID группы:

Get-ADGroup «Domain Admins» | ft ObjectGUID, SID

3. Посмотреть членов группы

Перечень членов групп с базовой информацией о каждом пользователе:

Get-ADGroupMember -Identity Administrators

Вывести на экран только имена пользователей:

Get-ADGroupMember -Identity Administrators | ft name

Рекурсивный запрос:

Get-ADGroupMember -Identity Administrators -Recursive | ft name

* в данном примере используется ключ Recursive — это позволяет вывести на экран не только членов группы Administrators, но и членов групп, которые входят в эту группу.

Вывести членов групп с подробной информацией по каждому из них:

Get-ADGroupMember -Identity «Users» | foreach { Get-ADUser $_ -Properties * }

Расчет выполняется методом Count:

(Get-ADGroupMember -Identity Administrators).Count

5. В каких группах состоит пользователь

Задача немного обратная — работаем с пользователем и отображаем список групп, в которые он входит:

Get-ADUser Administrator -Properties Memberof | Select -ExpandProperty memberOf

6. Список пустых групп

Имеются ввиду группы, в которых нет ни одного пользователя:

Get-ADGroup -filter * | where {-Not ($_ | Get-ADGroupMember)} | Select Name

7. Cписок пользователей, которые не входят в конкретную группу

Get-ADuser -Filter * -Properties MemberOf | where { -Not ($_.MemberOf -match «Managers») } | Select Name

* в данном примере мы увидем список пользователей, которые не входят в группу Managers.

Удаление пользователей спустя определенное время с Powershell Add-ADGroupMember -MemberTimeLive

В Windows Server 2016 появилась возможность автоматического удаления пользователей спустя время (временное членство) и без планировщика задач. Для работы ключа нам нужен 2016 уровень леса, который мы можем проверить так:

Кроме этого требуется активация PAM (Privileged Access Management). После однократного включения компонента его нельзя будет удалить. Проверить включен он у вас или нет можно так:

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

Для установки временного интервала используется командлет New-TimeSpan:

Если мы выполним следующую команду, то сможем узнать о ходе времени членства в группе:

Значение TTL отображается в секундах.

Использование Get-ADUser с фильтрацией по атрибутам

Используя опцию -Filter, вы можете фильтровать список учётных записей пользователей по одному или нескольким атрибутам. В качестве аргументов этого параметра можно указать значение определённых атрибутов пользователей Active Directory. Если вы используете параметр -Filter, командлет Get-ADUser будет перечислять только тех пользователей, которые соответствуют критериям фильтра.

Например, я хочу перечислить активные (Enabled) учётные записи пользователей, имя которых содержит «Dmitry» (в приведённом ниже примере используется несколько фильтров; вы можете комбинировать условия, используя стандартные логические операторы сравнения PowerShell):

Get-AdUser -Filter "(Name -like '*Dmitry*') -and (Enabled -eq 'True')" -Properties * | Select-Object name,enabled

Кроме того, вы можете отсортировать полученный список пользователей по определённому атрибуту пользователя (столбцу) с помощью командлета Sort-Object. Вы также можете использовать командлет Where-Object для одновременного указания нескольких критериев фильтрации.

Get-ADUser -Filter * -properties PasswordExpired,PasswordLastSet,PasswordNeverExpires -SearchBase 'OU=NY,DC=hackware,DC=ru'| Where-Object {$_.name –like "*Dmitry*" -and $_.Enabled -eq $true} | Sort-Object PasswordLastSet | Select-Object Name,PasswordExpired,PasswordLastSet,PasswordNeverExpires

Таким образом, вы можете составить таблицу с любыми необходимыми атрибутами пользователей Active Directory.

Добавление пользователя в группу

param($name,$group,$ou,$dc,$help)
function funHelp()
{
"
DESCRIPTION:
NAME: AddUserToGroup.ps1
Adds a user account to a group
 
PARAMETERS: 
-name        name of the user 
-ou          ou of the group
-dc          domain of the user
-group       group to modify
-help        prints help file
 
SYNTAX:
AddUserToGroup.ps1 -name "cn=MyNewUser" -ou "ou=myOU" `
               -dc "dc=nwtraders,dc=com" `
               -group "cn=MyGroup"
                
Adds a user named MyNewUser in the myOU 
organizational unit in the nwtraders.com domain
to the MyGroup group in the same OU.
 
AddUserToGroup.ps1 -help
 
Displays the help topic for the script
 
"@
$helpText
exit
}
 
if($help){ "Obtaining help ..." ; funhelp }
if(!$name -or !$dc -or !$group -or !$ou) 
  { "Missing parameter ..." ; funhelp }
 
$CLass = "User"
"Modifying $name,$ou,$dc"
$ADSI = "LDAP://$group,$ou,$dc"
$ADSI.add("LDAP://$name,$ou,$dc")

Работа с фоновыми заданиями

В Windows PowerShell есть возможность запускать задачи в фоновом режиме, для того чтобы, не дожидаясь окончания работы команды (для случаев, когда задача выполняется долго), продолжать работать в текущей сессии. Для работы с фоновыми заданиями в PowerShell есть следующие командлеты:

  • Start-Job – запустить фоновую задачу;
  • Stop-Job – остановить фоновую задачу
  • Get-Job – посмотреть список фоновых задач;
  • Receive-Job – посмотреть результат выполнения фоновой задачи;
  • Remove-Job – удалить фоновую задачу;
  • Wait-Job – перевести фоновую задачу на передний план, для того чтобы дожидаться ее окончания.

Создание и включение учетной записи

param($help)
function funHelp()
{
"
DESCRIPTION:
NAME: CreateAndEnableUser.Ps1
Creates an enabled user account by reading csv file
 
PARAMETERS: 
 
-help        prints help file
 
SYNTAX:
CreateAndEnableUser.Ps1 
 
Creates an enabled user by reading a csv file
 
CreateAndEnableUser.Ps1 -help
 
Displays the help topic for the script
 
"@
$helpText
exit
}
 
if($help){ "Obtaining help ..." ; funhelp }
 
$aryUser= import-csv -Path c:\psbook\enabledusers.csv
$Class = "User"
$dc = "dc=nwtraders,dc=com"
 
foreach($strUser in $aryUser)
{
 $ou = "ou="+$strUser.OU
 $ADSI = "LDAP://$ou,$dc"
 $cnuser="cn="+$($strUser.userName)
 $User = $ADSI.create($CLass,$cnuser)
 $User.put("SamaccountName", $($strUser.username))
 $User.setInfo()
 $User.put("userPassword", $($strUser.Password))
 $user.psbase.invokeset("AccountDisabled", "False")
 $User.setInfo()
}

Добавление пользователя в группу

param($name,$group,$ou,$dc,$help)
function funHelp()
{
"
DESCRIPTION:
NAME: AddUserToGroup.ps1
Adds a user account to a group
 
PARAMETERS: 
-name        name of the user 
-ou          ou of the group
-dc          domain of the user
-group       group to modify
-help        prints help file
 
SYNTAX:
AddUserToGroup.ps1 -name "cn=MyNewUser" -ou "ou=myOU" `
               -dc "dc=nwtraders,dc=com" `
               -group "cn=MyGroup"
                
Adds a user named MyNewUser in the myOU 
organizational unit in the nwtraders.com domain
to the MyGroup group in the same OU.
 
AddUserToGroup.ps1 -help
 
Displays the help topic for the script
 
"@
$helpText
exit
}
 
if($help){ "Obtaining help ..." ; funhelp }
if(!$name -or !$dc -or !$group -or !$ou) 
  { "Missing parameter ..." ; funhelp }
 
$CLass = "User"
"Modifying $name,$ou,$dc"
$ADSI = "LDAP://$group,$ou,$dc"
$ADSI.add("LDAP://$name,$ou,$dc")

Форматирование в Windows PowerShell

В Windows PowerShell существует набор командлетов, которые предназначены для форматирования вывода результата работы командлета. Они позволяют пользователю отобразить результат в том виде, в котором ему удобно просматривать данный результат.

  • Format-List – вывод результата команды в формате списка свойств, где на каждой новой строке отдельное свойство;
  • Format-Table — вывод результата команды в виде таблицы;
  • Format-Wide — вывод результата команды в виде широкой таблицы, в которой отображается только одно свойство каждого объекта;
  • Format-Custom – в данном случае форматирование вывода происходит с использованием пользовательского представления.

Команды для работы с данными

PowerShell использует класс System.Management.Automation.VerbsData для определения действий, которые применяются к обработке данных. В следующей таблице перечислено большинство определенных команд.

Имя команды (псевдоним) Действие Неподходящие синонимы
Backup (ba) Сохраняет данные путем репликации. Save, Burn, Replicate, Sync
Checkpoint (ch) Создает моментальный снимок текущего состояния данных или их конфигурации. Поиск различий
Compare (cr) Сравнивает данные из одного ресурса с данными из другого. Поиск различий
Compress (cm) Сжимает данные ресурса. Образует пару с командой . Компактный
Convert (cv) Изменяет данные из одного представления в другое, если командлет поддерживает двунаправленное преобразование или преобразование между несколькими типами данных. Change, Resize, Resample
ConvertFrom (cf) Преобразует один первичный тип входных данных (существительное в командлете указывает входные данные) в один или несколько поддерживаемых типов выходных данных. Export, Output, Out
ConvertTo (ct) Преобразует один или несколько типов входных данных в основной тип выходных данных (существительное в командлете указывает тип выходных данных). Import, Input, In
Dismount (dm) Отключает именованную сущность от расположения. Эта команда образует пару с командой . Unmount, Unlink
Edit (ed) Изменяет существующие данные путем добавления или удаления содержимого. Change, Update, Modify
Expand (en) Восстанавливает сжатые данные ресурса до исходного состояния. Эта команда образует пару с командой . Explode, Uncompress
Export (ep) Инкапсулирует первичные входные данные в постоянное хранилище данных, например файл, или в формат обмена. Эта команда образует пару с командой . Extract, Backup
Группа (GP) Упорядочивает или связывает один или несколько ресурсов.
Import (ip) Создает ресурс на основе данных, хранящихся в постоянном хранилище данных (например, в файле) или в формате обмена. Например, командлет импортирует данные из файла с разделителями-запятыми (CSV) в объекты, которые могут использоваться другими командлетами. Эта команда образует пару с командой . BulkLoad, Load
Initialize (in) Подготавливает ресурс для использования и задает для него состояние по умолчанию. Erase, Init, Renew, Rebuild, Reinitialize, Setup
Limit (l) Применяет ограничения к ресурсу. Quota
Merge (mg) Создает один ресурс из нескольких. Combine, Join
Mount (mt) Подключает именованную сущность к расположению. Эта команда образует пару с командой . Подключение
Out (o) Отправляет данные из среды. Например, командлет отправляет данные на принтер.
Publish (pb) Делает ресурс доступным для других пользователей. Эта команда образует пару с командой . Deploy, Release, Install
Restore (rr) Задает для ресурса предопределенное состояние, например состояние, заданное . Например, командлет запускает восстановление системы на локальном компьютере. Repair, Return, Undo, Fix
Save (sv) Сохраняет данные, чтобы избежать их потери.
Sync (sy) Гарантирует, что два ресурса или более находятся в одном и том же состоянии. Replicate, Coerce, Match
Unpublish (ub) Делает ресурс недоступным для других пользователей. Эта команда образует пару с командой . Uninstall, Revert, Hide
Update (ud) Обеспечивает актуальность ресурса для поддержания его состояния, точности, согласованности или соответствия требованиям. Например, командлет обновляет и добавляет файлы форматирования в текущую консоль PowerShell. Refresh, Renew, Recalculate, Re-index

Get-ADUser: поиск в нескольких подразделениях с помощью SearchBase

Чтобы отображать пользователей только из определённого контейнера домена (организационного подразделения), используйте опцию -SearchBase:

Get-ADUser -SearchBase 'OU=London,DC=hackware,DC=loc' -filter * -Properties PasswordExpired,PasswordLastSet,PasswordNeverExpires | Format-Table Name,PasswordExpired,PasswordLastSet,PasswordNeverExpires

Если вам нужно выбрать пользователей из нескольких подразделений одновременно, используйте следующий скрипт PowerShell:

$OUs = "OU=NY,DC=woshub,DC=com","OU=LA,DC=woshub,DC=com","OU=MA,DC=woshub,DC=com"
$OUs | ForEach-Object {Get-ADUser -SearchBase $_ -Filter * | Select-Object Name,Enabled}

Создание пользователей AD из CSV в Powershell New-ADUser

Я создал в Excel такой файл и сохранил как CSV:

Для того что бы импортировать файл есть командлет Import-Csv

Нужно обратить внимание какой разделитель (делимитер) в файле и у вас в системе. Увидеть это можно так:

Если есть отличия, то тогда в команде импорта нужно добавить ключ ‘-Delimiter’ и указать тот, который в файле. Отличия будут, например, если файл был создан в русской локализации, а импорт идет на сервере с английской.

Импорт и создание пользователей делается так:

Сложение в Path сделано для демонстрации такой возможности и не является обязательным.

У меня так же была ошибка:

  • new-aduser указанное имя не является корректным именем пользователя
  • New-ADUser : The object name has bad syntax
  • New-ADUser : Directory object not found

Причины возникновения не совсем ясны. Хоть ошибка и указывала на начало командлета New-AdUser, но проблема была в Path. Из рекомендаций были убрать в CSV файле пустые строки, проверить, что у нас нет путаницы с кавычками ( что мы не используем » ‘ в одном объекте), а так же вынести значение Path вне цикла в переменную. Мне помогло, как я понял, замена кавычек в ключе, экранирование скобками и удаление пробелов в этом ключе.

Само собой мы можем в Csv файле создать больше колонок. Например мы можем там создать и пароль, что бы у всех пользователей он был разный, но нужно будет обязательно сконвертировать его через ConvertTo-SecureString.

Если вы не уверены в том, что все данные корректны, то можете добавить ключ -WhatIf, который покажет результаты выполнения команды, но не выполнит ее физически.

Рекомендую

Примеры

Пример 1. Запуск процесса, использующего значения по умолчанию

В этом примере запускается процесс, использующий файл в текущей папке. Команда использует все значения по умолчанию, включая стиль окна по умолчанию, рабочую папку и учетные данные.

Пример 3. Запуск процесса сортировки элементов в новый файл

В этом примере запускается процесс, который сортирует элементы в файле и возвращает отсортированные элементы в файлах . Все ошибки записываются в файл. Параметр UseNewEnvironment указывает, что процесс выполняется с собственными переменными среды.

В этом примере используется сплаттинг для передачи параметров командлету . Дополнительные сведения см. в разделе about_Splatting.

Пример 6. Использование разных команд для запуска процесса

В этом примере показано, как найти команды, которые можно использовать при запуске процесса. Доступные команды определяются расширением имени файла, который запускается в процессе.

В примере используется для создания объекта System.Diagnostics.ProcessStartInfo для , файла, который выполняется в процессе PowerShell. Свойство Verbs объекта ProcessStartInfo показывает, что команды Open и можно использовать с или с любым процессом, выполняющим файл.

Пример 7. Указание аргументов для процесса

Обе команды запускают интерпретатор команд Windows, выдавая команду в папке

Так как это имя папки содержит пробел, значение должно быть заключено в экранированные кавычки.
Обратите внимание, что первая команда указывает строку как ArgumentList. Вторая команда представляет собой массив строк

В Windows можно запустить , чтобы запустить процесс с повышенными разрешениями.
Это повышает уровень контекста текущего пользователя. Параметр Credential позволяет указать альтернативное имя пользователя и пароль, что позволяет запустить процесс в другом пользовательском содержимом.
Однако параметры Credential и Verb нельзя использовать вместе.

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

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

Пример 9. Создание отсоединяемого процесса в Linux

В Windows создает независимый процесс, который продолжает выполняться независимо от запускаемой оболочки. На платформах, отличных от Windows, только что запущенный процесс присоединяется к запущенной оболочке. Если запущенная оболочка закрыта, дочерний процесс завершается.

Чтобы избежать завершения дочернего процесса на unix-подобных платформах, можно объединить с . В следующем примере запускается фоновый экземпляр PowerShell в Linux, который остается активным даже после закрытия сеанса запуска. Команда собирает выходные данные в файле в текущем каталоге.

В этом примере выполняет команду Linux , которая запускается как отсоединяемый процесс. Дополнительные сведения см. в статье nohup в Википедии.

Изменение одного атрибута пользователя

param($name,$property,$value,$ou,$dc,$help)
function funHelp()
{
"
DESCRIPTION:
NAME: ModifyUser.ps1
Modifies a user account
 
PARAMETERS: 
-name        name of the user to modify
-ou          ou of the user
-dc          domain of the user
-property    attribute to modify
-value       value of the attribute
-help        prints help file
 
SYNTAX:
ModifyUser.ps1 -name "CN=MyNewUser" -ou "ou=myOU" `
               -dc "dc=nwtraders,dc=com" `
               -property "SamaccountName" `
               -value "MyNewUser"
 
Modifies a user named MyNewUser in the myOU 
organizational unit in the nwtraders.com domain
adds the SamaccountName attriute with a value
of MyNewUser
 
ModifyUser.ps1 -help
 
Displays the help topic for the script
 
"@
$helpText
exit
}
 
if($help){ "Obtaining help ..." ; funhelp }
if(!$name -or !$dc -or !$property -or !$value) 
  { "Missing parameter ..." ; funhelp }
 
$CLass = "User"
"Modifying $name,$ou,$dc"
$ADSI = "LDAP://$name,$ou,$dc"
$ADSI.put($property, $value)
$ADSI.setInfo()

Выполнение команд PowerShell

Как отмечалось ранее, команды PowerShell называются командлетами. Командлеты группируются в модули PowerShell, которые можно загружать по требованию. Командлеты могут быть написаны на любом компилируемом языке .NET или на собственном языке скриптов PowerShell.

Команды PowerShell, которые активируют выполнение других команд

Оператор вызова PowerShell () позволяет выполнять команды, хранящиеся в переменных и представленные строками или блоками скриптов. С его помощью можно выполнять любые собственные команды или команды PowerShell. Такая возможность полезна в скрипте, если нужно динамически создавать параметры командной строки для собственной команды. Дополнительные сведения см. в разделе .

С помощью командлета можно выполнять собственные команды, но его следует использовать, только если нужно управлять выполнением команды. В командлете есть параметры для поддержки следующих сценариев:

  • выполнение команды с использованием разных учетных данных;
  • скрытие окна консоли, созданного новым процессом;
  • перенаправление потоков stdin, stdout и stderr;
  • использование другой рабочей папки для команды.

В следующем примере выполняется собственная команда с перенаправленными потоками ввода и вывода.

Дополнительные сведения см. в статье Start-Process.

В Windows командлет выполняет действие по умолчанию для указанного элемента. Например, он запускает исполняемый файл или открывает файл документа с использованием приложения, связанного с этим типом файла. Действие по умолчанию зависит от типа элемента и разрешается поставщиком PowerShell, который предоставляет доступ к элементу.

В следующем примере в веб-браузере по умолчанию открывается репозиторий исходного кода PowerShell.

Общие сведения о шаблоне CSV

Загрузите и заполните CSV для массовой отправки, чтобы успешно создавать пользователей Azure AD в пакетном режиме. Загружаемый шаблон CSV будет похож на этот пример:

Предупреждение

При добавлении только одной записи с помощью шаблона CSV необходимо сохранить строку 3 и добавить новую запись в строку 4.

Обязательно добавьте расширение файла .csv и удалите пробелы перед userPrincipalName, passwordProfile и accountEnabled.

Структура шаблона CSV

В скачанном шаблоне CSV содержатся следующие строки.

  • Номер версии: Первая строка с номером версии должна сохраняться в отправляемой версии CSV-файла.
  • Заголовки столбцов. Формат заголовков столбцов: <имя элемента> <Required или пусто>. Например, . Некоторые старые версии шаблона могут иметь небольшие отличия.
  • Строка примеров. Мы включили в шаблон строку с примерами допустимых значений для каждого столбца. Строку примеров необходимо удалить, заменив реальными значениями.

Дополнительные рекомендации

  • Первые две строки шаблона отправки нельзя удалять или изменять, иначе отправка не будет обработана.
  • Обязательные столбцы перечислены первыми.
  • Мы не рекомендуем добавлять в шаблон новые столбцы. Любые дополнительные столбцы игнорируются и не обрабатываются.
  • Мы рекомендуем скачивать свежие версии шаблона CSV как можно чаще.
  • Убедитесь в отсутствии пробелов в начале и конце каждого поля. Наличие таких пробелов у имени субъекта-пользователя приведет к ошибке импорта.
  • Убедитесь, что значения в поле Первоначальный пароль соответствуют действующей в данный момент .

Команды Windows PowerShell для отчетности

командлетов для создания отчетов устарело

1. Планы лицензирования

  • AccountSkuld — показывает доступные планы лицензирования для вашей организации;
  • ActiveUnits — количество лицензий, приобретенных вами для определенного плана лицензирования;
  • WarningUnits — количество непродленных лицензий в плане лицензирования, которые истекают по окончании 30-дневного льготного периода;
  • ConsumedUnits — количество лицензий, которые вы назначили пользователям из определенного плана лицензирования.

документации Microsoft по использованию PowerShell для создания отчетов

Get-MsolUser

where

3. Отчеты электронной почты

  • Вы можете использовать PowerShell для получения информации о каждом почтовом ящике в вашей системе, используя следующую команду:
  • Вы также можете получить список всех почтовых ящиков, в которые не выполнялся вход в течение 30 дней (или любого другого нужного вам периода, означающего, что вам необходимо закрыть эти ящики). Для этого выполните команду:
  • Еще один полезный инструмент для обеспечения кибербезопасности — проверка активности ваших почтовых ящиков, чтобы отметить те из них, которые отправляют и получают больше всего почты. Для этой задачи есть специальный командлет. Выполните команду:

Как найти пользователя AD и вывести список свойств с помощью Get-ADUser

Чтобы использовать командлет Get-ADUser необходимо установить Модуль Active Directory для Windows PowerShell, в каких системах он уже присутствует и как его установить если он ещё не установлен, смотрите в статье «Как установить и использовать модуль Active Directory PowerShell». На рабочих станциях данный модуль вы можете установить следующей командой:

Add-WindowsCapability -online -Name "Rsat.ActiveDirectory.DS-LDS.Tools"

Чтобы использовать командлет Get-ADUser, вам не нужно запускать его под учётной записью с администратором домена или с делегированными разрешениями. Любой авторизованный пользователь домена AD может запускать команды PowerShell для получения значений большинства атрибутов объекта AD (кроме конфиденциальных, например, связанных со сменой пароля). Если вам нужно запустить команду Get-ADUser из другой учётной записи, используйте параметр -Credential.

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

Get-ADUser -Filter *

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

Чтобы выполнить запрос AD на конкретном контроллере домена, используйте опцию -Server. Чтобы вывести информацию по определённому пользователю, укажите его имя после опции -Identity:

Get-ADUser -Server ds.hackware.ru -Identity MiAl

Чтобы изменить атрибуты пользователя, используйте командлет Set-ADUser.

По умолчанию командлет Get-ADUser возвращает только 10 основных атрибутов пользователя (из более чем 120 свойств учётной записи пользователя): DistinguishedName, SamAccountName, Name, SID, UserPrincipalName, ObjectClass, статус учётной записи (Enabled: True/False в соответствии с атрибутом UserAccountControl AD) и так далее. В этом случае вывод командлета не содержит информации о времени последней смены пароля пользователя.

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

Get-ADUser -Identity MiAl -Properties *

Командлет Get-ADUser с опцией «-Properties *» отображает список всех пользовательских атрибутов AD и их значений.

Теперь мы перейдём к форматированию вывода Get-ADUser, чтобы отображались необходимые атрибуты пользователя. Вы можете отображать сразу несколько атрибутов пользователя:

  • PasswordExpired (Срок действия пароля истёк)
  • PasswordLastSet (Последний раз пароль установлен)
  • PasswordNeverExpires (Пароль никогда не истекает)
  • LastLogonTimestamp (Временная метка последнего входа)

Выполните команду:

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

Get-ADUser MiAl -Properties PasswordExpired,PasswordLastSet,PasswordNeverExpires,lastlogontimestamp

Теперь в пользовательских данных есть информация о статусе учётной записи (Истёк ли срок действия пароля: True/False), дате последней смены пароля и времени последнего входа пользователя в домен. Чтобы отобразить эту информацию в более удобном табличном виде и удалить все ненужные атрибуты, используйте Select-Object -Property или Format-Table:

Get-ADUser -Filter * -Properties PasswordExpired,PasswordLastSet,PasswordNeverExpires | Format-Table Name,PasswordExpired,PasswordLastSet,PasswordNeverExpires

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
Работатека
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: