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
Enable-WindowsOptionalFeature -Online -FeatureName RSATClient-Roles-AD-Powershell
Основи синтаксису і використання командлет Get-ADComputer
Довідка про параметри командлета Get-ADComputer викликається стандартно за допомогою Get-Help:
Get-Help Get-ADComputer
Щоб отримати інформацію про доменної облікового запису конкретного комп'ютера або сервера, вкажіть його ім'я в якості аргументу параметра -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-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