Как я могу проверить, заблокирована ли учетная запись ad?

Display All Of The Properties For A Specified User

All Active Directory users have the same core attributes populated but they’re not displayed by default. If you notice in the examples above, I had to specify in order for Powershell to know to check those AD properties. If you omit the property parameter, the filter won’t find it even though the attribute is there on the user’s account.

A good thing is this allows a wildcard (*) so you can see what’s available. I would also recommend to explicitly specify your properties when querying many users so you’re not putting to much stress on the remote Domain Controller.

#Get all properties for a user.
Get-ADUser aryastark -Properties * 

Отключение неактивных пользователей в AD

Отключение пользователей AD – это ежемесячная работа, и ее может быть трудно выполнить через графический интерфейс, если пользователей много. Я предлагаю вам сценарий, в котором вы можете отключить большое количество пользователей с помощью Powershell.

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

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

Disable Active directory User Powershell Scripts

#Wintel-AD-Disable Active Directory User:

#for single:
Import-Module ActiveDirectory
Disable-ADAccount -Identity user1

#for bulk:

#imports active directory module to only corrent session as it is related to AD

Import-Module ActiveDirectory

#Takes input from users.csv file into this script

Import-Csv "C:\Users.csv" | ForEach-Object {

#assign input value to variable-samAccountName 

$samAccountName = $_."samAccountName"

#get-aduser will retrieve samAccountName from domain users. if we found it will disable else it will go to catch

try { Get-ADUser -Identity $samAccountName |
Disable-ADAccount  
}

#It will run when we can't find user

catch {

#it will display the message

  Write-Host "user:"$samAccountname "is not present in AD"
}
}

Azure Active Directory

Azure Active Directory (Azure AD) — облачная служба управления удостоверениями и доступом. Она нужна для создания учетных записей пользователей и управления ими и применяется в облачных сервисах Microsoft, таких как Azure, Office 365, SharePoint. Если в AD для аутентификации пользователей служит Kerberos, то здесь в той же роли используется OAuth 2.0.

Синхронизация AD и Azure AD происходит по трем сценариям.

  1. Сценарий синхронизации каталога. Он позволяет синхронизировать с облаком новые учетные записи пользователей и групп, при этом логин у пользователя синхронизируется с AD, а пароль придется сменить, так как он не синхронизируется.
  2. Сценарий синхронизации паролей дает возможность пользователям логиниться в облачный сервис с паролем от локальной учетной записи AD. При этом синхронизируется логин и хеш пароля.
  3. Сценарий единого входа обеспечивает проверку подлинности пользователей в локальном каталоге AD и позволяет реализовать сценарий единого входа с использованием корпоративных учетных данных — за счет синхронизации токенов доступа.

Про атаку на сценарий единого входа много рассказать не могу, и для него нужны права администратора. Так как пароль в данном случае передается между Azure AD Connect и Azure ServiceBus в открытом виде, то есть возможность его перехватить. FileAzureadHookDLL позволяет внедрить DLL и получить пароль пользователя во время соединения. В качестве параметра данное приложение принимает PID процесса AzureADConnectAuthenticationAgentService.

Сценарий синхронизации паролей

Для нас особенно интересен сценарий синхронизации паролей (PHS). Для синхронизации данных в AD есть приложение Azure AD Connect, которое извлекает данные из AD и передает их в AAD. За синхронизацию отвечает служба DCSync.

Схема синхронизации AzureAD Connect

При создании соединения на хосте заводится новая база данных, при этом используется LocalDB для SQL Server. Мы можем просмотреть информацию о работающем экземпляре с помощью инструмента SqlLocalDb.exe.

Пример работы SqlLocalDb.exe

База данных поддерживает Azure AD Sync — в ней хранятся метаданные и конфигурации для службы. Зашифрованный пароль находится в таблице ADSync.dbo.mms_management_agent в поле encrypted_configuration, и для его расшифровки используется библиотека C:\Program Files\Microsoft Azure AD Sync\Binn\mcrypt.dll. Расшифровывать можно при помощи AzureadDecryptorMsol.ps1.

Пример работы скрипта AzureadDecryptorMsol.ps1

Как видите из конфигурации безопасности, если получится скомпрометировать сервер с Azure AD Connect и получить доступ либо к ADSyncAdmins, либо к локальным группам администраторов, то открывается возможность заполучить учетку, которая может выполнять DCSync.

Конфигурации безопасности

Изменение общей информации о пользователе

$objUser = "LDAP://cn=MyNewUser,ou=myTestOU,dc=nwtraders,dc=msft"
$objUser.put("SamaccountName", "myNewUser")
$objUser.put("givenName", "My")
$objUser.Put("initials", "N.")
$objUser.Put("sn", "User")
$objUser.Put("DisplayName", "My New User")
$objUser.Put("description" , "simple new user")
$objUser.Put("physicalDeliveryOfficeName", "RQ2")
$objUser.Put("telephoneNumber", "999-222-1111")
$objUser.Put("mail", "<a href="mailto:"></a>")
$objUser.Put("wwwHomePage", "<a href="http://www.mnu.msn.com"">http://www.mnu.msn.com"</a>)
$objUser.setInfo()

Tutorial Powershell — Найти неактивные компьютеры в Active Directory

Как Администратор, запустите новый запрос командной строки POWERSHELL.

Найти неактивные компьютеры в Active Directory.

Copy to Clipboard
$Days = 10
$Time = (Get-Date).Adddays(-($Days))
Get-ADComputer -Filter {LastLogonTimeStamp -lt $Time} -Properties * | Select Name, LastLogonDate

Вот вывод команды.

Copy to Clipboard
Name LastLogonDate
—- ————-
TECH-SRV01 2/3/2021 12:15:23 AM
TECH-SRV02 12/15/2020 11:59:30 PM

В нашем примере мы обнаружили компьютеры, которые не входить в систему в течение 10 дней или более.

Дополнительно экспортировать результат в качестве файла CSV.

Copy to Clipboard
$Days = 10
$Time = (Get-Date).Adddays(-($Days))
Get-ADComputer -Filter {LastLogonTimeStamp -lt $Time} -Properties * | Select Name, LastLogonDate | export-csv inactivecomputers.csv

Вот содержимое файла CSV.

Copy to Clipboard
#TYPE Selected.Microsoft.ActiveDirectory.Management.ADComputer
«Name»,»LastLogonDate»
«TECH-SRV01″,»2/3/2021 12:15:23 AM»
«TECH-SRV02″,»12/15/2020 11:59:30 PM»

Найдите компьютеры, которые не вошли в Активный каталог за последние 30 дней.

Copy to Clipboard
$Days = 30
$Time = (Get-Date).Adddays(-($Days))
Get-ADComputer -Filter {LastLogonTimeStamp -lt $Time} -Properties * | Select Name, LastLogonDate

Найдите компьютеры, которые не вошли в Активный каталог за последние 60 дней.

Copy to Clipboard
$Days = 60
$Time = (Get-Date).Adddays(-($Days))
Get-ADComputer -Filter {LastLogonTimeStamp -lt $Time} -Properties * | Select Name, LastLogonDate

Найдите компьютеры, которые не вошли в Активный каталог за последние 90 дней.

Copy to Clipboard
$Days = 90
$Time = (Get-Date).Adddays(-($Days))
Get-ADComputer -Filter {LastLogonTimeStamp -lt $Time} -Properties * | Select Name, LastLogonDate

Поздравляю! Вы можете найти неактивные компьютеры в Active Directory с помощью Powershell.

2021-02-28T21:02:42-03:00

Conclusion

Hope you like the above article to use the PowerShell Get-AdComputer cmdlet to find computer object information from the active directory.

In the above PowerShell Get-AdComputer examples, we have seen many different examples to get a list of computers based on the get-adcomputer filter name or get-adcomputer filter operating system or get-adcomputer filter ou.

The above steps by steps guide on how to use cmdlet with different parameters like Identity, LDAPFilter, and SearchBase with real-world examples will help you understand the use of cmdlet.

You can find more topics about PowerShell Active Directory commands and PowerShell basics on the ShellGeek home page.

Статус репликации 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 "[email protected]" -to "[email protected]" -Subject "Lycra AD Replication Report(Do not reply)" -SmtpServer "lycra-com.mail.protection.outlook.com" -body  -BodyAsHtml

Local Administrator Password Solution

Local Administrator Password Solution (LAPS) — система, предназначенная для управления паролями локальных администраторов на компьютерах домена. Она позволяет администратору домена периодически менять пароль учетной записи локальных администраторов, делегировать права на чтение и сброс пароля для пользователей или групп Active Directory, а также обеспечивает хранение паролей в расширенном атрибуте объекта компьютера в Active Directory. Система состоит из трех компонентов: агента, модуля PowerShell для настройки системы, Active Directory для хранения паролей.

Есть два способа обнаружить LAPS.

  1. На всех хостах, где установлен LAPS, в папке C:\Program Files\LAPS\CSE\ будет файл AdmPwd.dll.
  2. Конфигурации LAPS определяются в объектах групповой политики. Командой Get-DomainGPO -Identity «*LAPS*» можно поискать любой объект групповой политики, у которого есть слово LAPS в отображаемом имени.

1
2
3
4
5

displaynameLAPS

gpcfilesyspath\\test.local\SysVol\test.local\Policies\{C3801BA8-56D9-4F54-B2BD-FE3BF1A71BAA}

distinguishednameCN={C3801BA8-56D9-4F54-B2BD-FE3BF1A71BAA},CN=Policies,CN=System,DC=testlab,DC=local

GPRegistryPolicy

1 Parse-PolFile»\\test.local\SysVol\test.local\Policies\{C8701BA8-56D9-4123-B6B2-FE3FA5031BAA}\Machine\Registry.pol»

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

KeyNameSoftware\Policies\Microsoft Services\AdmPwd

ValueNamePasswordComplexity

ValueTypeREG_DWORD

ValueLength4

ValueData4

KeyNameSoftware\Policies\Microsoft Services\AdmPwd

ValueNamePasswordLength

ValueTypeREG_DWORD

ValueLength4

ValueData8

KeyNameSoftware\Policies\Microsoft Services\AdmPwd

ValueNamePasswordAgeDays

ValueTypeREG_DWORD

ValueLength4

ValueData30

KeyNameSoftware\Policies\Microsoft Services\AdmPwd

ValueNameAdminAccountName

ValueTypeREG_SZ

ValueLength26

ValueDatalocalfish

KeyNameSoftware\Policies\Microsoft Services\AdmPwd

ValueNameAdmPwdEnabled

ValueTypeREG_DWORD

ValueLength4

ValueData1

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

>Get-DomainOU-GPLink»C3801BA8-56D9-4F54-B2BD-FE3BF1A71BAA»-Properties distinguishedname

distinguishedname
——————

OU=Workstations,DC=testlab,DC=local

OU=Servers,DC=testlab,DC=local

>Get-DomainComputer-SearchBase»LDAP://OU=Workstations,DC=testlab,DC=local»-Properties distinguishedname

distinguishedname
——————

CN=WKSTN02,OU=Workstations,DC=testlab,DC=local

CN=WKSTN01,OU=Workstations,DC=testlab,DC=local

CN=WKSTN03,OU=Workstations,DC=testlab,DC=local

CN=WKSTN04,OU=Workstations,DC=testlab,DC=local

>Get-DomainComputer-SearchBase»LDAP://OU=Servers,DC=testlab,DC=local»-Properties distinguishedname

distinguishedname
——————

CN=FS01,OU=Servers,DC=testlab,DC=local

Мы нашли все компьютеры, на которые распространяется эта конфигурация LAPS. Компонент LAPS PowerShell дает много возможностей. Например, вот такой командой мы можем определить, что LAB\Workstation Admins и LAB\Server Admins имеют расширенные права в подразделениях Workstations и Servers:

1
2
3
4
5
6
7

>Find-AdmPwdExtendedRights-Identity»Workstations»|fl

ObjectDNOU=Workstations,DC=testlab,DC=local

ExtendedRightHolders{NT AUTHORITY\SYSTEM,LAB\Domain Admins,LAB\Workstation Admins}

>Find-AdmPwdExtendedRights-Identity»Servers»|fl

ObjectDNOU=Servers,DC=testlab,DC=local

ExtendedRightHolders{NT AUTHORITY\SYSTEM,LAB\Domain Admins,LAB\Server Admins}

Теперь легко получить пароль.

1
2
3
4
5

>Get-AdmPwdPassword-ComputerName wkstn02|fl

ComputerNameWKSTN02

DistinguishedNameCN=WKSTN02,OU=Workstations,DC=testlab,DC=local

Password!qP)iyT

ExpirationTimestamp

Другие командлеты Windows PowerShell

Также хотелось бы выделить следующие командлеты Windows PowerShell, которые наверняка Вам понадобятся и будут полезны.

  • Get-ExecutionPolicy – с помощью данного командлета можно узнать действующую политику выполнения Windows PowerShell для текущего сеанса;
  • Set-ExecutionPolicy – командлет изменяет политику выполнения Windows PowerShell;
  • Write-Host – выводит информацию на экран (пишет текст);
  • Read-Host – считывает строку ввода из консоли;
  • Write-Warning – выводит предупреждающее сообщение;
  • Write-Error – командлет объявляет ошибку и выводит ее в поток ошибок;
  • Get-Date – возвращает текущую дату и время;
  • Set-Date – командлет изменяет системную дату и время на компьютере.

Вот мы с Вами и рассмотрели полезные и часто используемые командлеты Windows PowerShell, надеюсь, этот справочник будет Вам полезен, удачи!

Нравится26Не нравится3

Query Active Directory Commuters with Get-ADComputer: Examples

The following are some more useful examples of using the Get-ADComputer cmdlet to select computers in a domain based on certain criteria.

The -LDAPFilter attribute allows you to use various LDAP queries as a parameter of the Get-ADComputer cmdlet, for example:

Find all disabled computer objects in a specific Active Directory OU:

To delete all computer accounts that have not been logged into the domain for more than 6 months, you can use the command:

Display the time the computer’s password was last changed in Active Directory. By default, the password should be changed automatically by the computer once every 30 days. If the computer password doesn’t match the password in AD, the computer’s trust relationship with the domain will be broken:

The result of the Get-ADComputer command can be exported to a plain text file:

You can also get a list of computers and export it to a CSV file:

Or get an HTML report with a list of computers and necessary properties:

You can remotely query AD computers via WMI or CIM. For example, to display the serial numbers of all servers in the domain:

To perform a specific action with all the computers from the resulting list, you must use the Foreach loop. In this example, we want to get a list of Windows Server hosts in the domain with model and manufacturer.

You can use a shorter loop syntax. Suppose you need to run a specific command on all computers in a specific OU. In this example, I will use the Invoke-Command to run a group policy update command on all servers:

In the same way, you can get various useful information from all computers in the domain:

  • Check Windows activation status on domain computers
  • Check free disk space
  • Check and update the PowerShell version
  • Collect network configurations from all computers
  • Get current logged usernames

Using Get-ADComputer and PowerShell startup scripts, you can control various computer settings or store various useful information in computer attributes in AD (for example, you can add a username to the computer description,).

For example, I monitor the state of the SCCM agent on users’ computers. When each computer boots, it runs a small logon script which saves the ccmexec service status to an unused computer attribute – extensionAttribute10. Then, using the following command, I can find computers on which the CCMExec service is missing or not running.

You can get Active Directory user accounts information using the Get-ADUser cmdlet.

Получение списка компьютеров

Если у вас нет списка компьютеров к которым вы планируете подключиться и узнать активного пользователя — это можно сделать через AD. На примере ниже будут возвращены все компьютеры:

Операция по получению списка компьютеров может быть очень долгой, если у вас большой парк ПК в AD. Вы можете вернуть только компьютеры, которые не отключены в AD (Disable) следующим способом:

Можно использовать и фильтрацию. Так я верну компьютеры имена которые начинаются на «CL»:

Получить список имен мы можем так:

Если у вас список компьютеров не относится к AD или имеет другой формат — то просто преобразуйте его в массив:

Добавление сервера в домен

Добавление сервера в домен, смена IP – это большая задача, которая иногда становится утомительной, так почему бы не автоматизировать ее. Скрипт работает безупречно и без каких-либо заминок. Это отличный вариант в категории скриптов Active Directory Powershell.

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

Обычно скрипт просит предоставить IP контроллера домена, что является главным требованием при добавлении сервера в домен. После этого он обычно просит указать имя домена, например xyz.com, и перезагружает сервер без предварительного запроса.

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

После запуска этого скрипта первым делом войдите в систему с доменными учетными данными, чтобы проверить, можете ли вы войти в систему или нет.

Adding Servers into Domain Powershell Scripts

## Pre-requisite:- 
#1). Update the Primary DNS IP in the Network adapter before joining server\machine to domain by running below cmd.

## For single server\machine to be added to domain. 

set-DnsClientServerAddress-InterfaceIndex 2 -ServerAddresses ("Primary DNS IP address")
set-DnsClientServerAddress -InterfaceAlias Ethernet -AddressFamily IPv4 |Select-Object ServerAddresses

#Once DNS IP is updated, then execute below cmd. 
Add-Computer -ComputerName $computers -Domain "YourDomainName" -Restart

#Give your domain credentials in the credential request window. 



***************************************************************************************************************************************



## For multiple server\machine to be added to domain.

set-DnsClientServerAddress -InterfaceIndex 2 -ServerAddresses ("Primary DNS IP address")
set-DnsClientServerAddress -InterfaceAlias Ethernet -AddressFamily IPv4 |Select-Object ServerAddresses

#Once DNS IP is updated on machines, then execute below cmd.

$computers = Get-Content -Path c:\test\desktop\computers.txt
Add-Computer -ComputerName $computers -Domain "YourDomainName" -Restart

#Give your domain credentials in the credential request window.
Понравилась статья? Поделиться с друзьями:
Быть в курсе нового
Добавить комментарий

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