Get-ADComputer висновок інформації про комп'ютери в Active Directory через PowerShell

PowerShell командлет Get-ADComputer можна використовувати для отримання різних відомостей про облікові записи комп'ютерів (серверах і робочих станціях) в домені Active Directory. Це один з найбільш корисних командлетів для вибірки і пошуку комп'ютерів за різними критеріями в домені AD (для отримання інформації про облікові записи користувачів AD використовується інший командлет - Get-ADUser).

зміст:

  • Основи синтаксису і використання командлет Get-ADComputer
  • Приклади використання командлет Get-ADComputer

Припустимо, ваша задача - знайти в Active Directory всі неактивні комп'ютери, які не реєструвалися в домені більше 120 днів і заблокувати облікові записи цих комп'ютерів.

Перш ніж приступити до роботи з Командлети Get-ADComputer, необхідно підключити модуль Active Directory Module for Windows PowerShell.

Import-Module activedirectory

Порада. У PowerShell 3.0 (представлений в Windows Server 2012) і вище цей модуль підключається за замовчуванням при установці компонента Remote Server Administration Tools -> Role Administration Tools -> AD DS and AD LDS Tools -> Active Directory модуль для Windows PowerShell. Щоб використовувати командлет Get-ADComputer в клієнтських Windows 10,8.1 і Windows 7 потрібно завантажити і встановити RSAT для вашої версії ОС і включити модуль AD-PowerShell з панелі управління або командою:
Enable-WindowsOptionalFeature -Online -FeatureName RSATClient-Roles-AD-Powershell

Основи синтаксису і використання командлет Get-ADComputer

Довідка про параметри командлета Get-ADComputer викликається стандартно за допомогою Get-Help:

Get-Help Get-ADComputer

Для отримання інформації з AD за допомогою командлетів модуля AD for Powershell не обов'язково мати права адміністратора домена, досить щоб обліковий запис під якою запускається командлет входила в групу користувачів домену (Authenticated Users / Domain Users).

Щоб отримати інформацію про доменної облікового запису конкретного комп'ютера або сервера, вкажіть його ім'я в якості аргументу параметра -Identity:

Get-ADComputer -Identity SRV-DB01

DistinguishedName: CN = DB01, OU = Servers, OU = MSK, DC = winitpro, DC = ru DNSHostName: DB01.winitpro.ru Enabled: True Name: DB01 ObjectClass: computer ObjectGUID: 1234567c-13f8-4a2c-8b00-b30a32324103 SamAccountName: DB01 $ SID: S-1-5-21-3243682314-1360322815-2238451561-4318 UserPrincipalName: 

Командлет повернув тільки базові властивості об'єкта Computer з AD. Нас цікавить час останньої реєстрації комп'ютера в домені AD, але цієї інформація у висновку команди немає. Виведемо всі доступні властивості даного комп'ютера з Active Directory:

Get-ADComputer -Identity SRV-DB01 -Properties *

За допомогою Get-Member можна отримати список всіх властивостей класу Computer в AD:

Get-ADComputer -Filter * -Properties * | Get-Member

Як ви бачите, час останнього входу даного комп'ютера в мережу вказано в атрибуті комп'ютера LastLogonDate - 21.09.2015 0:20:17.

Командлет Get-ADComputer дозволяє вивести в результатах команди будь-які з властивостей комп'ютера. Приберемо всю зайву інформацію, залишивши в виведенні тільки значення полів Name і LastLogonDate.

Get-ADComputer -identity SRV-DB01 -Properties * | FT Name, LastLogonDate -Autosize

Отже, ми отримали дані про останній час реєстрації в домені для одного комп'ютера. Тепер нам потрібно змінити команду так, щоб вона повертала інформацію про час останньої реєстрації в мережі для всіх комп'ютерів домену. Для цього замінимо параметр -Identity на -Filter:

Get-ADComputer -Filter * -Properties * | FT Name, LastLogonDate -Autosize

Ми отримали таблицю, яка містить тільки 2 поля: ім'я комп'ютера і дата LastLogonData. Ви можете додати в цю таблицю інші поля об'єкта Computer з AD. Щоб вивести дані про комп'ютерах в певному контейнері домену (OU), скористайтеся параметром SearchBase:
Get-ADComputer -SearchBase 'OU = Moscow, DC = winitpro, DC = loc' -Filter * -Properties * | FT Name, LastLogonDate -Autosize

Відсортуємо результати запиту по часу останнього логіна в мережу (поле LastLogonDate) за допомогою команди Sort:

Get-ADComputer -Filter * -Properties * | Sort LastLogonDate | FT Name, LastLogonDate -Autosize

Отже, ми отримали список комп'ютерів домену і час їх останнього входу в мережу Active Directory. Тепер ми хочемо заблокувати облікові записи комп'ютерів, які не використовувалися більше 120 днів.

За допомогою Get-Date отримаємо в змінної значення поточної дати і віднімемо з поточної дати 120 днів:

$ Date_with_offset = (Get-Date) .AddDays (-120)

Отриману змінну з датою можна використовувати в якості фільтра запиту Get-ADComputer по полю LastLogonDate

Get-ADComputer -Properties LastLogonDate -Filter LastLogonDate -lt $ date_with_offset | Sort LastLogonDate | FT Name, LastLogonDate -Autosize

Таким чином, ми отримали список неактивних комп'ютерів, які не реєструвалися в мережі більше 120 днів. За допомогою командлета Set-ADComputer або Disable-ADAccount ви можете відключити ці облікові записи.

Порада. У перший раз краще протестувати результати команди за допомогою перемикача -WhatIf, завдяки якому команда не вносить ніяких змін, показуючи, що станеться при її виконанні.

Get-ADComputer -Properties LastLogonDate -Filter LastLogonData -lt $ date_with_offset | Set-ADComputer -Enabled $ false -whatif

Тепер можна заблокувати всі отримані облікові записи комп'ютерів:

Get-ADComputer -Properties LastLogonDate -Filter LastLogonData -lt $ datecutoff | Set-ADComputer -Enabled $ false

Порада. Список заблокованих, відключених і неактивних комп'ютерів і користувачів домену можна отримати також за допомогою окремого командлет Search-ADAccount.

Приклади використання командлет Get-ADComputer

Нижче представлені ще кілька корисних прикладів команд з використанням командлет Get-ADComputer, які можна використовувати для вибірки і пошуку комп'ютерів домену по певними критеріями.

Отримати загальна кількість активних (незаблокованих) комп'ютерів в Active Directory:

(Get-ADComputer -Filter enabled -eq "true"). Count

Почитати кількість серверів з Windows Server в домені:

(Get-ADComputer -Filter enabled -eq "true" -and OperatingSystem -Like '* Windows Server *'). Count

Отримати список комп'ютерів в певному OU, імена яких починаються з BuhPC:

Get-ADComputer -Filter Name -like "BuhPC *" -SearchBase 'OU = Moscow, DC = winitpro, DC = loc' -Properties IPv4Address | Format-table Name, DNSHostName, IPv4Address | ft -Wrap -Auto

При пошуку по OU ви можете використовувати додатковий параметр -SearchScope 1, який означає, що потрібно шукати тільки в кореневому розділі. параметр -SearchScope 2 означає рекурсивний пошук комп'ютерів в усіх вкладених OU.

Вибрати всі робочі станції з ОС Windows 10:

Get-ADComputer -Filter OperatingSystem -like '* Windows 10 *'

Отримати список серверів в домені з версією ОС, IP адресою і встановленим Service Pack:
Get-ADComputer -Filter 'operatingsystem -like "* Windows server *" -and enabled -eq "true"' -Properties Name, Operatingsystem, OperatingSystemVersion, OperatingSystemServicePack, IPv4Address | Sort-Object -Property Operatingsystem | Select-Object -Property Name, Operatingsystem, OperatingSystemVersion, OperatingSystemServicePack, IPv4Address | ft -Wrap -Auto

На виході отримали таку красиву таблицю зі списком Windows Server в AD.

Атрибут -LDAPFilter дозволяє використовувати в якості параметра командлет Get-ADComputer різні LDAP запити, наприклад:

Get-ADComputer -LDAPFilter "(name = * db *)" | ft

Вибрати заблоковані комп'ютери в певному OU:

Get-ADComputer -filter * -SearchBase 'OU = Computers, dc = winitpro, dc = loc' | Where-Object $ _. Enabled -eq $ False

Щоб видалити всі акаунти комп'ютерів в домені, ВОНО НЕ БУДЕ в домені більше 6 місяців, можете скористатися командою:

get-adcomputer -properties lastLogonDate -filter * | where $ _. lastLogonDate -lt (get-date) .addmonths (-6) | Remove-ADComputer

Результат виконання команди Get-ADComputer можна вивантажити в текстовий файл:

Get-ADComputer -Filter OperatingSystem -Like '* Windows Server 2008 *' -Properties OperatingSystem | Select DNSHostName, OperatingSystem | Format-Table -AutoSize C: \ Script \ server_system.txt

Також ви можете отримати вибірку комп'ютерів і експортувати його в CSV файл:

Get-ADComputer -Filter * -Property * | Select-Object Name, OperatingSystem, OperatingSystemServicePack | Export-CSV All-Windows.csv -NoTypeInformation -Encoding UTF8

Або отримати HTML файл звіту зі списком комп'ютерів і потрібних атрибутів комп'ютера:

Get-ADComputer -Filter OperatingSystem -Like '* Windows Server 2012 *' -Properties * | Select-Object Name, OperatingSystem | ConvertTo-Html | Out-File C: \ ps \ ad_computer.html

Щоб виконати певної дію з усіма комп'ютерами з отриманого списку потрібно використовувати цикл Foreach. У цьому прикладі ми хочемо отримати список серверів в домені з моделлю і виробником:

$ Computers = Get-ADComputer -Filter OperatingSystem -Like '* Windows Server *'
Foreach ($ Computer in $ Computers)

$ Hostname = $ Computer.Name
$ ComputerInfo = (Get-WmiObject -Computername $ Hostname Win32_ComputerSystem)
$ Manufacturer = $ Computer.Manufacturer
$ Model = $ Computer.Model
Write-Host "Name: $ Hostname"
Write-Host "Manufacturer: $ Manufacturer"
Write-Host "Model: $ Model"
Write-Host ""
$ Content = "$ Hostname; $ Manufacturer; $ Model"
Add-Content -Value $ Content -Path "C: \ PS \ ServersInfo.txt"

Або можна використовувати більш короткий синтаксис циклу. Припустимо нам потрібно виконати певну команду на всіх комп'ютерах в певному OU (в цьому прикладі ми хочемо запустити на всіх серверах команду оновлення налаштувань групових політик):

get-adcomputer -SearchBase "OU = Servers, DC = winitpro, DC = loc" -Filter * | % Invoke-Command -Computer $ _. Name -ScriptBlock gpupdate / force

За допомогою Get-AdComputer і логон скрипта PowerShell ви можете контролювати різні параметри комп'ютера. Я, наприклад, контролюю стан агента SCCM на комп'ютерах користувачів. При завантаженні кожного комп'ютера на ньому відпрацьовує логон скрипт, який за допомогою Set-ADComputer зберігає стан служби ccmexec у вільний атрибут комп'ютера - extensionAttribute10.

Потім за допомогою наступної команди я можу знайти комп'ютери, на яких відсутній або не запущено служба CCMExec:

get-adcomputer -filter extensionAttribute10 -ne "SCCM Agent: Running" -SearchBase "OU = Computers, OU = MSK, DC = winitpro, DC = ru" -properties dNSHostName, extensionAttribute10, LastLogonDate | select-object dNSHostName, extensionAttribute10, LastLogonDate