20 лучших скриптов powershell для active directory

Создание OU Разовое и массовое

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

Как это работает

Создание OU – это одна команда в Powershell, но массовое создание требует данных, которые могут быть представлены в CSV или текстовом файле, что и делается в этом скрипте.

Вероятный результат

Если вы все сделаете правильно, вы сможете увидеть созданные OU в dsa.msc.

Create OU Powershell Scripts

create active directory OU.txt

#Wintel-AD-Create Active Directory OU:

for single:
-----------
New-ADOrganizationalUnit -Name abc -Path "OU=Employees,DC=contoso,DC=com" -Description "if any" -PassThru


For Bulk:
---------

#Take input from ou_names file 
import-csv c:\ou_names.csv | ForEach-Object {

#Assign input values to variable-ouname
 $ouname = $_."ouname"
 
 #It will search for given OU already exists in AD
  $ADOU=get-ADOrganizationalunit -Filter 'Name -like $ouname'
 
 try{

 #It will compare given OU and AD searched OU
if($ouname -eq $ADOU){

#If it already in AD, it will go to caught statement
write-host "given OU-" $ouname "is already there in AD"}

#It will create OU if not exits
else
{
 New-ADOrganizationalUnit -Name $ouname -path "DC=contoso,DC=com" -PassThru
}
}

#It will show the path of OU which already exists
catch{
write-host $ouname "is exists in AD"
write-host $ADOU
}
}

ou_names.csv

ouname
ou1
ou2
ou3
ou4
ou5

readme.txt

This script will create OU's in AD.

Prerequisites:

1.We should provide the OU names which needs to created in AD.

Steps to run the script:

1.Provide OU names in csv file to script.
2.It will check for OU in AD whether it already exists.
3.If it doesn't exist in AD, it will create else it will provide path od OU.

Запуск консоли

Чтобы запустить Active Directory Users and Computers, выберите соответствующий пункт меню Microsoft Exchange. Щелкните Start (Пуск), щелкните Programs (Программы) или All
Programs (Все программы), выберите Microsoft Exchange, a
затем Active Directory Users and Computers. Если инструменты Exchange недоступны, следует установить их, как описано
в главе 1 в разделе «Средства администрирования Exchange
Server».
Совет Чтобы ускорить доступ к Active Directory Users and
Computers, щелкните Start (Пуск), выберите Programs (Программы) или All Programs (Все программы), затем Microsoft
Exchange, щелкните правой кнопкой Active Directory Users
and Computers и далее выберите Pin To Start Menu (Закрепить в меню «Пуск»). В результате Active Directory Users
and Computers станет доступной непосредственно из меню
Start.

Sessions tab

The sessions tab of the user properties window allows you to configure the timeout and reconnection settings for a user.

End a disconnected session – Allows you to configure the duration after which a disconnected session should end.

Active session limit – Allows you to configure the duration after which an active session should end.

Idle session limit – Allows you to configure the duration after which an idle session should end.

Disconnect from session – if you choose this option the session will be disconnected once the session limit is reached.

End session – if you choose this option the session will be ended once the session limit is reached.

Allow reconnection – This section allows you to configure the reconnection settings for a user’s session

From any client – choosing this option allows the user to reconnect from any client to his session

From originating client only – choosing this option allows the user to reconnect from any client to his session

Note: Disconnecting from a session means dropping the connection with the server without logging off whereas ending a session means disconnecting and logging off.

The values related to this Tab are stored in a LDAP attribute called userParameters.

Что такое политики LDAP в Active Directory и зачем они нужны

Под термином “политики” в связи с Active Directory обычно имеются в виду групповые политики – мощное и легко расширяемое средство для централизованного управления многими настройками ОС и приложений. Некоторые ещё вспоминают “политики паролей” – PSO, которые появились с Windows Server 2008.

Однако, есть ещё одно применение термина “политики Active Directory” – благодаря объектам, которые относятся к классу , существует возможность тонкой настройки работы контроллеров домена (DC) и серверов глобального каталога (GC), а также ощутимого повышения скорости, надёжности и безопасности их функционирования. Все эти параметры будут относиться именно к клиентским запросам по LDAP и ограничивать размер ответа, занимаемую память, диапазон значений, тайм-ауты и другие подобные свойства. Давайте разберёмся что это, и как это можно (и нужно) эффективно использовать.

Статус репликации AD

Если вы хотите узнать статус репликации AD в вашем домене, этот скрипт является наиболее подходящим для этого. Он предоставляет статус репликации и, если есть какая-либо ошибка, показывает ее.

Вероятный результат

Вы можете запланировать выполнение этого скрипта на регулярной основе, если возникнут ошибки, вы сможете проверить и устранить их.

AD-Replication-status Powershell Scripts

$myRepInfo = @(repadmin /replsum * /bysrc /bydest /sort:delta)
 
# Initialize our array.
$cleanRepInfo = @()
   # Start @ #10 because all the previous lines are junk formatting
   # and strip off the last 4 lines because they are not needed.
    for ($i=10; $i -lt ($myRepInfo.Count-4); $i++) {
            if($myRepInfo -ne ""){
            # Remove empty lines from our array.
            $myRepInfo -replace '\s+', " "           
            $cleanRepInfo += $myRepInfo            
            }
            }           
$finalRepInfo = @()  
            foreach ($line in $cleanRepInfo) {
            $splitRepInfo = $line -split '\s+',8
            if ($splitRepInfo -eq "Source") { $repType = "Source" }
            if ($splitRepInfo -eq "Destination") { $repType = "Destination" }
           
            if ($splitRepInfo -notmatch "DSA") {      
            # Create an Object and populate it with our values.
           $objRepValues = New-Object System.Object
               $objRepValues | Add-Member -type NoteProperty -name DSAType -value $repType # Source or Destination DSA
               $objRepValues | Add-Member -type NoteProperty -name Hostname  -value $splitRepInfo # Hostname
               $objRepValues | Add-Member -type NoteProperty -name Delta  -value $splitRepInfo # Largest Delta
               $objRepValues | Add-Member -type NoteProperty -name Fails -value $splitRepInfo # Failures
               #$objRepValues | Add-Member -type NoteProperty -name Slash  -value $splitRepInfo # Slash char
               $objRepValues | Add-Member -type NoteProperty -name Total -value $splitRepInfo # Totals
               $objRepValues | Add-Member -type NoteProperty -name "% Error"  -value $splitRepInfo # % errors  
               $objRepValues | Add-Member -type NoteProperty -name ErrorMsg  -value $splitRepInfo # Error code
          
            # Add the Object as a row to our array   
            $finalRepInfo += $objRepValues
           
            }
            }
$html = $finalRepInfo|ConvertTo-Html -Fragment       
           
$xml = $html

$attr = $xml.CreateAttribute("id")
$attr.Value='diskTbl'
$xml.table.Attributes.Append($attr)


$rows=$xml.table.selectNodes('//tr')
for($i=1;$i -lt $rows.count; $i++){
    $value=$rows.Item($i).LastChild.'#text'
    if($value -ne $null){
       $attr=$xml.CreateAttribute('style')
       $attr.Value='background-color: red;'
       $rows.Item($i).Attributes.Append($attr)
    }
   
    else {
       $value
       $attr=$xml.CreateAttribute('style')
       $attr.Value='background-color: green;'
       $rows.Item($i).Attributes.Append($attr)
    }
}

#embed a CSS stylesheet in the html header
$html=$xml.OuterXml|Out-String
$style='<style type=text/css>#diskTbl { background-color:black ; } 
td, th { border:1px solid black; border-collapse:collapse; }
th { color:black; background-color:yellow; }
table, tr, td, th { padding: 2px; margin: 0px } table { margin-left:50px; }</style>'


ConvertTo-Html -head $style -body $html -Title " AD Replication Report"|Out-File C:\Scripts_new\Replication\ReplicationReport.htm

$html1=get-content C:\Scripts_new\Replication\ReplicationReport.htm
$smtpServer = ""
$smtpFrom = ""
$smtpTo = ""
$messageSubject = ""
 
$message = New-Object System.Net.Mail.MailMessage $smtpfrom, $smtpto
$message.Subject = $messageSubject
$message.IsBodyHTML = $true
 
$message.Body =$html1
 
$smtp = New-Object Net.Mail.SmtpClient($smtpServer)
$smtp.Send($message)

#send-MailMessage  -From "Replication@lycra.mail.onmicrosoft.com" -to "dhrub.bharali@capgemini.com" -Subject "Lycra AD Replication Report(Do not reply)" -SmtpServer "lycra-com.mail.protection.outlook.com" -body  -BodyAsHtml

Дополнительные сведения

Пользователи, компьютеры и группы, созданные API более ранней версии, создают объекты в пути DN, указанном в атрибуте WellKnownObjects. Атрибут WellKnownObjects расположен в главе NC домена. В следующем примере кода показаны соответствующие пути в атрибуте WellKnownObjects из CONTOSO.COM области NC.

Dn: DC=CONTOSO,DC=COM

Например, в следующих операциях используются API более ранней версии, которые отвечают на пути, определенные в атрибуте WellKnownObjects:

Операция Версии операционной системы
Пользовательский интерфейс «Регистрация домена» Windows NT версии4.0Windows 2000Windows XP ProfessionalWindows XP UltimateWindows Server 2003Windows Server 2003 R2Windows VistaWindows Server 2008Windows 7Windows Server 2008 R2
NET COMPUTER Все версии
NET GROUP Все версии
NET USER Все версии
ДОБАВЛЕНИЕ NETDOM, где команда /ou не указана или поддерживается Все версии

Полезно сделать контейнер по умолчанию для групп пользователей, компьютеров и безопасности OU по нескольким причинам, в том числе:

  • Групповые политики можно применять в контейнерах OU, но не в контейнерах класса CN, где по умолчанию ставятся основные принципы безопасности.

  • Передовая практика — упорядочность принципов безопасности в иерархию OU, которая отражает организационную структуру, географическое расположение или модель администрирования.

При перенаправлении папок CN=Users и CN=Computers следует помнить о следующих проблемах:

  • Целевой домен должен быть настроен для запуска на уровне Windows Server 2003 или выше. Для функционального уровня Windows Server 2003 это означает:

    • Windows Сервер 2003 или более новый
    • Windows Сервер 2003 или более новый
    • Все контроллеры домена в целевом домене должны работать Windows Server 2003 или более новые.
    • Windows Необходимо включить функциональный уровень домена Server 2003 или более высокий.
  • В отличие от CN=USERS и CN=COMPUTERS, контейнеры OU подвергаются случайным удалениям привилегированных учетных записей пользователей, в том числе администраторов.

    Контейнеры CN=USERS и CN=COMPUTERS — это объекты, защищенные системой, которые не могут и не должны удаляться для обратной совместимости. Но их можно переименовать. Организационные подразделения могут быть удалены администраторами случайно.

    Windows Версии сервера 2003 для пользователей Active Directory & компьютеров могут выполнять действия в Области Защиты организационного подразделения от случайного удаления.

    Windows Сервер 2008 и более новые версии оснастки пользователей и компьютеров Active Directory имеют объект Protect от случайного удаления, который можно выбрать при создании нового контейнера OU. Вы также можете выбрать его на вкладке Объект в диалоговом окне Свойства для существующего контейнера OU.

    Сценарий задокументирован в script to Protect Organizational Units (OUs) от случайного удаления.

  • Exchange Server 2000 и 2003 годах с ошибками.

Find Last Logon Time Using CMD

You can find out the time the user last logged into the domain from the command line using the net or dsquery tools.

Open a command prompt (you don’t need domain administrator privileges to get AD user info), and run the command:

net user administrator /domain| findstr "Last"

You got the user’s last logon time: 08.08.2019 11:14:13.

If you want to get the last login time of a local user, you need to remove the /domain parameter:

net user User | findstr "Last"

You can also get the last logon time using dsquery. For example:

dsquery * domainroot -filter "(&(objectCategory=Person)(objectClass=User)(sAMAccountName=administrator))" -attr distinguishedName lastLogon lastLogonTimestamp -limit 0

The main problem is that the attributes lastLogon and lastLogonTimestamp are stored in timestamp format in AD, and you need to additionally convert it to a normal time format.

You can also use this command to find all users who are inactive, for example, for 10 weeks:

dsquery user domainroot -inactive 10

Использование сохраненных запросов LDAP (Saved Queries) в оснастке Active Directory Users and Computers

Чтобы воспользоваться запросами, запустите оснастку (snap-in) Active Directory Users and Computers.

Работа с LDAP запросами по группам Active Directory

Допустим, что вам нужно найти все пустые группы в домене или каком-то OU (organizational unit). Создайте новую папку, например, «Запросы по группам». В ней вы будете хранить все ваши новые запросы по группам.

Функционал сохранённых запросов (Saved Queries) в оснастке MMC Active Directory Users and Computers (ADUC) до сих пор остаётся полезным и актуальным, даже несмотря на появление PowerShell и соответствующего модуля для Active Direcotory. LDAP запросы позволяют вывести объекты в едином представлении невзирая на иерархию OU в домене. Полученный результат можно экспортировать в текстовые файлы с разделителями, либо выполнить групповые операции над найденными объектами. Также функционал сохранённых запросов полезен в тех случаях, когда необходимо обеспечить неквалифицированный персонал средством поиска в Active Directory по заранее настроенным запросам. В этой статье я создам небольшой список-обзор запросов, которыми пользуюсь сам и, которые, я думаю, будут полезны всем.

Параметры, существующие с Windows Server 2003

Что делает

Устанавливает максимальное число результатов, являющихся полями одного атрибута одного объекта, которые может вернуть один LDAP запрос. В общем-то ключевое, под что параметр заточен – это атрибут members у группы. Политика появилась в Windows Server 2003 вместе с изменениями в репликации multivalued-атрибутов (если помните, именно тогда и при помощи LVR был убран штатный для Windows 2000 Server конфликт репликации multivalued-атрибутов). Ранее, в Windows 2000 Server, значение было установлено на 1000 и не могло быть изменено штатным способом.

Модифицируем, например, в случае наличия групп с количеством участников выше 1500. Хитрый DoS, блокируемый этим параметром, придумать можно, но вот проблемы с отправкой почты на адрес “Все сотрудники” в случае линейного включения всех учетных записей пользователей в группу придумываются ощутимо быстрее. Хотите упростить ситуацию – ставьте сразу на 5000 – это верхний лимит параметра.

Export Users With the GUI AD Export Tool

If you need advanced exports such as adding additional user properties or users group membership then check out the examples below of the AD User Export Tool.


Export User information to CSV using AD Pro Toolkit

You can download a free trial of the AD User Export Tool by clicking the button below.

Once you have the AD Pro toolkit installed click on “User Export”

Step 2: Choose Path to Export

In the search criteria box pick where you want to export from, you can pick the following:

  • Entire Domain – This will export all users in your domain
  • Select OU or Group – This allows you to select one or multiple OUs or groups to export.

In this example, I’m going to export all users from two security groups “Management_folders” and Management_Printers”.

Step 3: Pick AD User Fields to include in the Export

The attribute picker has over 50 attributes you can easily add or remove to the export.

For this example, I’m going to leave the default fields selected. You can always remove unwanted fields after exporting by deleting the columns in the CSV file.

Step 4: Click the Run button to preview the export

The last step is to click the export button and select the export file type.

You will be prompted to save the file. Give the file a name and save it to your computer.

Here is an example export.

Include Users Group Membership in the CSV

One nice feature of the GUI tool is it will include the user’s group membership. Below is an example from my export. So for each user, it will show you which security groups they are a member of. Of course, you can just uncheck “memberOf” in the columns picker if you don’t want to see this info.

The graphical user export tool makes it easy for anyone to export user information to CSV. If you don’t want to mess with complicated PowerShell scripts then I recommend checking it out.

Как удаленно управлять сервером с помощью RSAT из Windows 10

Если вы хотите управлять сервером удаленно через RSAT в Windows 10, вам необходимо установить инструмент и настроить его с помощью ряда шагов, которые мы объясним ниже.

Установите RSAT в Windows 10

Есть два способа установить RSAT в Windows 10: традиционный метод и новый метод. Если вы предпочитаете традиционный маршрут, вам необходимо перейти на сайт скачать microsoft . Затем найдите инструмент администрирования RSAT, загрузите его и запустите установочный файл на своем ПК. Примите лицензионные соглашения и нажмите кнопку «Принять».

С другой стороны, если вы выберете новый метод, вам нужно будет перейти в меню «Пуск» и открыть «Настройки». Затем нажмите «Система» и в левой части панели найдите «Приложения и функции». Нажмите на ссылку «Управление дополнительными функциями» et щелчок на «Добавить функцию». Найдите диспетчер сервера и другие инструменты, которые вы хотите установить.

Запустите RSAT в Windows 10

После того, как вы установили инструмент администрирования для сервер отдаленный на вашем компьютере , в меню «Пуск» появится папка «Администрирование». Если вы не видите эту папку, перейдите в «Панель управления», найдите «Системы и средства безопасности», затем нажмите «Администрирование». Затем выберите опцию «Администратор сервера».

Вы также можете запустите удаленный диспетчер серверов, щелкнув «Все приложения» из меню «Пуск». Выберите «Администрирование» и выберите «Администратор сервера».

Добавить удаленный сервер

Следующий шаг — добавить сервер или группу серверов с помощью инструментов администрирования сервер отдаленный «РСАТ». Для этого найдите и нажмите «Управление». Затем выберите «Добавить серверы». Вы увидите новое окно, в котором вам нужно ввести имя сервера, нажать стрелку, чтобы добавить его, и нажать кнопку «Добавить».

Управляйте сервером с помощью RSAT

Чтобы управлять удаленным сервером, который вы добавили, вы должны перейти в меню «Инструменты» и выбрать «Управление удаленным доступом». немедленно, соединение с сервером будет установлено, чтобы вы могли получить к нему доступ через клиента (где вы настроили удаленный сервер). Вы также можете выбрать себе подключиться к серверу с помощью Putty если вы предпочитаете использовать для этой цели дополнительный инструмент.

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

Вы также можете использовать консоли или MMC. Для этого убедитесь, что вы вошли на свой компьютер с учетной записью администратора. Выберите опцию «Пользователи и компьютеры Active Directory» в «Администрировании». Сразу откроется консоль, поэтому вам нужно нажать дополнительную кнопку мыши на красном крестике.

Выберите опцию «Изменить контроллер домена» и измените имя для идентификации доступа с клиентского компьютера. Нажмите кнопку «ОК» и дождитесь загрузки консоли, чтобы вы могли работать с ней, как это происходит во время установка и настройка сервера DCHP в Windows Server.

Finding Computers with Get ADComputer in PowerShell

The Get-ADComputer cmdlet allows us to find computer objects in the Active Directory and extract information from them. The true power of this cmdlet is that it comes with different options to find those computer objects.

We have the following options when it comes to finding objects:

  • Identity – Find computers based on their name. This will return only a single computer
  • Filter – Retrieve multiple objects based on a query
  • LDAPFilter – Use a LDAP query string to filter the computer objects
  • SearchBase – Specify the Active Directory path (OU) to search in
  • SearchScope – Specify how deep you want to search (base level, one level, or complete subtree)

The identity parameter is mainly used when you know the computer’s SAMAccountName (computer name). This allows you to select a single computer from the Active Directory and view the properties of the account.

Get-ADComputer -identity la-computer-22

Get-ADComputer

This will return the basic properties of the computer. We can use the -properties parameter to retrieve more information from the computer. I will explain more about retrieving different properties later in the article, but if you want to see all possible information about a computer account, then use the following command:

Get-ADComputer -identity la-computer-22 -properties *

Дата последней установки пароля

Дата последней установки пароля не может быть получена непосредственно из powershell, нам необходимо несколько изменить скрипт. Если вы попытаетесь получить дату последней установки пароля, она покажет дату в 1601 году. Поэтому я создал скрипт для получения даты последнего пароля заданного samaccount.

Как это работает

Сценарий получает атрибут последнего установленного пароля пользователя и изменяет его на правильную дату. Список пользователей может быть предоставлен с помощью файла txt.

Вероятный результат

Скрипт получит атрибут последнего установленного пароля пользователя и изменяет его на правильную дату. Список пользователей может быть предоставлен с помощью txt-документа.

Last password set Powershell Scripts

$a="Provide path for list of user in txt doc"
foreach($b in $a){
$g=get-aduser -Identity $b -Properties Name,pwdlastset
$date=$g.pwdLastSet
$pwdlast =$date.AddYears(1600).ToLocalTime()
"$b,$pwdlast"}

Проверка запросов к управляемому домену

Чтобы подключиться к управляемому домену, создать привязку к нему и выполнить поиск по протоколу LDAP, используйте средство LDP.exe. Оно входит в пакет средств удаленного администрирования сервера (RSAT). Дополнительные сведения см. в статье об установке средств удаленного администрирования сервера.

  1. Откройте LDP.exe и подключитесь к управляемому домену. Выберите Подключение и щелкните Подключить… .
  2. Введите имя DNS для подключения к управляемому домену по защищенному протоколу LDAP, которое вы создали на предыдущем шаге, например ldaps.aaddscontoso.com Чтобы использовать защищенный протокол LDAP, укажите для параметра Порт значение 636, а также установите флажок SSL.
  3. Щелкните ОК, чтобы подключиться к управляемому домену.

Затем выполните привязку к управляемому домену. Пользователи (и учетные записи служб) не могут выполнять простые привязки LDAP, если вы отключили синхронизацию хэшей паролей NTLM для управляемого домена. См. сведения об отключении синхронизации хэшей паролей NTLM в статье Отключение слабых шифров и синхронизации хэшей паролей для защиты управляемого домена доменных служб Azure AD.

  1. Выберите пункт меню Подключение, а затем Привязать… .
  2. Укажите учетные данные учетной записи пользователя, которая относится к управляемому домену. Введите пароль для этой учетной записи и нужный домен, например aaddscontoso.com.
  3. Для параметра Тип привязки выберите вариант Привязать с учетными данными.
  4. Щелкните ОК, чтобы завершить привязку к управляемому домену.

Чтобы просмотреть объекты, сохраненные в управляемом домене, сделайте следующее:

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

  2. Оставьте поле BaseDN пустым и щелкните OК.

  3. Выберите контейнер, например Пользователи AADDC, щелкните его правой кнопкой мыши и выберите пункт Поиск.

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

Чтобы выполнить прямой запрос к конкретному контейнеру, выберите пункт меню Представление > Дерево, затем укажите значение BaseDN, например OU=AADDC Users,DC=AADDSCONTOSO,DC=COM или OU=AADDC Computers,DC=AADDSCONTOSO,DC=COM. Дополнительные сведения о форматировании и создании запросов см. в статье с основными сведениями о запросах LDAP.

Примечание

Если используется самозаверяющий сертификат, добавленный в Доверенные корневые центры сертификации для LDAPS, убедитесь, что он работает с LDP.exe.

Свойства и методы интерфейса IADsPropertyList:

PropertyCount Это свойство интерфейса IADsPropertyList возвращает информацию о количестве свойств, предусмотренных для данного объекта.
GetPropertyItem() Этот метод позволяет вернуть свойство по его имени. В качестве параметров этот метод принимает имя свойства и его тип в виде значения перечисления ADSTYPEENUM (в нём предусмотрено 28 значений). Если тип свойства вам не известен, можно передать специальное значение ADSTYPE_UNKNOWN (26). Этот метод возвращает информацию в виде ссылки на объект IADsPropertyEntry, который можно использовать для получения информации о значении свойства.
Item() Этот метод отличается от метода GetPropertyItem() тем, что позволяет получить свойство (то есть объект IADsPropertyEntry) по имени или номеру. Тип свойства передавать при этом не надо.
Next() Этот метод позволяет вернуть следующее свойство в виде объекта IADsPropertyEntry. Обычно он используется для перебора всех свойств какого-либо объекта.
PurgePropertyList() Этот метод можно считать обратным методу IADs.GetInfo() — он очищает кэш свойств, удаляя из него информацию для всех свойств данного объекта. При этом сам объект Active Directory никак не затрагивается — этот метод работает только с представлением данного объекта в памяти. Обычно он используется, чтобы высвободить память на компьютере, на котором производятся операции с объектами Active Directory средствами ADSI.
PutPropertyItem() Этот метод позволяет присвоить новое значение свойству объекта Active Directory. По своим возможностям этот метод очень похож на метод Put() интерфейса IADs, и после его вызова необходимо вызвать метод IADs.SetInfo(). В качестве параметра метод PutPropertyInfo() принимает объект PropertyEntry, в котором должно быть задано новое значение для свойства.
Reset() Этот метод позволяет вернутся на начало списка свойств после вызова метода Next(), чтобы вернуться к исходному состоянию.
ResetPropertyItem() Этот метод позволяет удалить указанное свойство из кэша свойств. Этому методу можно передать как имя свойства, так и его номер. Этот метод используется только для экономии оперативной памяти, на сам объект Active Directory он никак не влияет.
Skip() Этот метод позволяет переместить курсор для списка свойств на указанное количество позиций. В качестве параметра этот метод принимает количество позиций, на которое следует переместиться. Обычно этот метод используется вместо метода Next() или вместе с ним для сокращения количества выполняемых операций.

Интерфейс IADsPropertyEntry предназначен для работы со значением (или значениями) свойства объекта Active Directory. Он может использоваться как для получения информации о значении свойства, так и для назначения свойству нового значения или значений. Свойства и методы:

Name Имя свойства, которое всегда соответствует наименованию соответствующего атрибута для объекта Active Directory согласно схеме.
ADsType Тип свойства в соответствии со значением перечисления ADSTYPEENUM.
ControlCode Позволяет определить тип операции, выполняемой со свойством. Возможные значения (перечисление ADS_PROPERTY_OPERATION_ENUM):
  • ADS_PROPERTY_CLEAR (1) — очистить объект свойства, убрав все настроенные для него ранее значения свойств;
  • ADS_PROPERTY_UPDATE (2) — заменить существующее значение свойства другим значением;
  • ADS_PROPERTY_APPEND (3) — добавить указанное значение к уже существующим;
  • ADS_PROPERTY_DELETE (4) — убрать ранее настроенное конкретное значение.
Values Определяет значения для свойства. Свойство Values работает с массивом объектов типа Variant. Любой из объектов типа Variant, который находится в данном массиве, должен обязательно реализовывать интерфейс IADsPropertyValue.

Интерфейсы IADsPropertyValue и IADsPropertyValue2 используются непосредственно для работы со значениями свойств. Каждому объекту IADsPropertyValue соответствует конкретное значение свойства. Массив значений (то есть массив объектов IADsPropertyValue) передаётся при помощи свойства Values объекта IADsPropertyEntry.

Using the Filter parameter

The Get-ADComputer cmdlet is also a great way to find one or multiple computers in your AD. Although the computer object doesn’t contain a lot of information, we can still use a couple of the properties to filter on.

Let’s take a look at a couple of commonly used examples to find computers:

We can find a computer based on a part of the computer name with the -like filter:

Get-ADComputer -Filter "Name -like '*workstation*'" | ft

Note the wildcard, this means that there can be something in front and after the word “workstation”.

Get Computers based on OS

The Active Directory also keeps track of all operating systems on the computers. So we can also get all computers that are running Windows 10 Pro for example:

Get-ADComputer -Filter "OperatingSystem -eq 'Windows 10 Pro'" | ft

Get all computers based on Operating System

We can also use multiple conditions, for example, to get all computers that running on Windows 10 or 11:

Get-ADComputer -Filter "OperatingSystem -eq 'Windows 10 Pro' -or OperatingSystem -eq 'Windows 11 Pro'" | ft

Get InActive Computers

Want to know how many inactive computers you have? We can filter the AD computers on the lastlogondate to extract all computers that are not used for the last 90 days for example.

For this, we first need to create a date variable, by taking the date from today and subtracting 90 days from it. We can then filter the AD Computers on the lastlogondate:

$date = (Get-Date) - (New-TimeSpan -Days 90)
Get-ADcomputer -Filter 'lastLogondate -lt $date' | ft

# Select the canonicalName,lastlogondate and name for a more readable list
Get-ADcomputer -Filter 'lastLogondate -lt $date' -properties canonicalName,lastlogondate | select name,canonicalname,lastlogondate | ft -AutoSize

Get all Disabled Computers

Another useful example is to get all disabled computers from the OU:

# Get all disabled computers
Get-ADComputer -Filter "Enabled -eq 'False'" | ft

# Get only enabled computers
Get-ADComputer -Filter "Enabled -eq 'True'" | ft

Useful Saved Query Examples for Active Directory MMC

The following table contains examples of commonly used LDAP queries to select Active Directory objects. You can save them to your ADUC console for daily use.

Saved ADUC Query LDAP Filter
Search for  ‘‘ keyword in the user name
Search for user accounts with ‘’ keyword in the description field
List empty Active Directory groups (with no users)
Users with the “Password never expires” option enabled
Users who have not changed their password for more than 3 months
Find users who have “Sales” in the department field
Users with the empty Profile Path attribute
Active user accounts with expired passwords
All AD users, except disabled
Locked AD user accounts
Users with e-mail addresses
Users without e-mail addresses
Users hidden from the Exchange Address Book (GAL):
The list of accounts never logged on to the domain (the information on last logon time can be obtained in a more convenient view in Additional Account Info tab)
User accounts created in a specific time period (in 2019)
AD users created this year
Computers running Windows 10
Computers running a specific Windows 10 build (for example Windows 10 1909 have build number 18363)
Find all Windows Server 2016 except domain controllers
All Microsoft SQL servers
All Exchange distribution groups
Find AD object with a specific SID

Импорт пользователей средствами LDIFDE

Утилита командной строки Ldifde позволяет также импортировать или экспортировать объекты Active Directory, используя файловый формат LDIF (Lightweight Directory Access Protocol Data Interchange File). Данный файловый формат состоит из блока строк, которые образуют конкретную операцию. В отличие от файлов CSV, в данном файловом формате каждая отдельная строка представляет собой набор атрибутов, после которого следует двоеточие и само значение текущего атрибута. Также как и в CSV файле, первой строкой обязан быть атрибут DN. За ним следует строка changeType, которая указывает тип операции (add, change или delete). Для того чтобы научиться разбираться в этом файловом формате, вам нужно выучить по крайней мере ключевые атрибуты принципалов безопасности. Пример предоставлен ниже:

Рис. 9. Пример LDF файла

Синтаксис команды следующий:

Ldifde -i -f filename.csv -k

где:

  • -i. Параметр, который отвечает за режим импорта. Если вы не укажете данный параметр, то эта команда будет использовать по умолчанию режим экспорта;
  • -f. Параметр, идентифицирующий имя файла, которое предназначено для импорта или экспорта;
  • -k. Параметр, предназначенный для продолжения импорта пропуская все возможные ошибки;
  • -v. Параметр, используя который вы можете вывести подробную информацию;
  • -j. Параметр, отвечающий за расположение файла журнала;
  • -d. Параметр, указывающий корень поиска LDAP;
  • -f. Параметр, предназначенный для фильтра поиска LDAP;
  • -p. Представляет собой область или глубину поиска;
  • -l. Предназначен для указания списка атрибутов с разделительными запятыми, который будет включен в экспорт результирующих объектов;
Понравилась статья? Поделиться с друзьями:
Быть в курсе нового
Добавить комментарий

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