Создание отчетов об объектах компьютеров Active Directory с помощью PowerShell. Чтобы найти что-либо относительно объектов компьютеров в активном каталоге (AD) и их свойств, мы в основном будем использовать командлет Get-ADComputer. Например, в домене Active Directory мы можем использовать командлет Get-ADComputer PowerShell для получения информации о объектах учетной записи компьютера (серверы и рабочие станции). Этот командлет является одним из наиболее полезных для поиска компьютеров AD по различным критериям.
В этой статье рассматриваются множественные применения командлета Get-ADComputer и как мы можем превратить его в полноценный и ценный отчет.
Давайте начнем с блога статьи Создание отчетов об объектах компьютеров Active Directory с помощью PowerShell.
Создание отчетов Active Directory о компьютерах с помощью Powershell
Предварительные требования
Если вы хотите следовать примерам скриптов в этой статье, убедитесь, что у вас есть следующее:
- Среда AD с по крайней мере одним присоединенным к домену рабочим станцией.
- Уровень функциональности домена – Windows Server 2016.
- Удаленные инструменты администрирования сервера (RSAT) для Active Directory установлены на вашей рабочей станции, присоединенной к домену.
- Последняя версия PowerShell, или по крайней мере PowerShell 7.x и выше, требуется для выполнения сценариев.
Ну, как создать отчеты Active Directory о компьютерах с помощью PowerShell? Давайте разберемся.
Понимание команды PowerShell Get-ADComputer
Прежде чем мы начнем, давайте ознакомимся с командой Get-ADComputer. Нам не нужны привилегии администратора домена для получения информации из Active Directory. Для этого достаточно обычной учетной записи пользователя, состоящего в группе Пользователи домена или Аутентифицированные пользователи.
Ну, команда Get-Help, как обычно, предоставляет список всех остальных параметров для Get-ADComputer:
$command = Get-ADComputer
Get-Help $command
Пример вывода:
В качестве альтернативы мы можем получить доступ к официальной документации по команде Get-ADComputer здесь.
После просмотра длинного списка параметров в нашей командной строке и документации мы можем начать написание сценариев. Помните, что самым важным параметром, который сопровождает Get-ADComputer команду, является параметр Identity.
Чтобы получить информацию о конкретном компьютере учетной записи в домене, используйте параметр -Identity со своим именем в качестве аргумента:
Get-ADComputer -Identity DC01
Вот пример вывода:
DistinguishedName : CN=DC01,OU=Servers,OU=DC,OU=IT,DC=infrasos,DC=com
DNSHostName : DC01.infrasos.com
Enabled : True
Name : DC01
ObjectClass : computer
ObjectGUID : 87654321-1204-5578-0000-123462341264
SamAccountName : DC01
SID : S-1-5-21-123656780-1234667890-0986654321-1264
Как результат, Get-ADComputer возвращает только основные свойства объекта Компьютера из AD. Однако выполнение вышеуказанной команды предоставляет только топ-уровневую информацию о объекте компьютера. Затем, если мы хотим углубиться и отобразить доступные свойства объекта, мы можем использовать параметр -Properties.
Чтобы перечислить все свойства объекта, добавьте -Properties и добавьте значение астериск (*). Значение астериска является подстановочным значением, указывающим ВСЕ:
Get-ADComputer -Identity DC01 -Properties *
Пример вывода:
С другой стороны, мы можем перемещаться внутри консоли Active Directory Users and Computers (или dsa.msc) и просматривать свойства оттуда. Наконец, выберите объект компьютера и перейдите на вкладку Редактор атрибутов, чтобы просмотреть список свойств объекта компьютера.
Фильтрация результатов Get-ADComputer
Одним из недостатков является то, что мы можем отображать больше информации по вещам, которые нам не обязательно нужны. Используя конвейер PowerShell, командлет Get-ADComputer позволяет нам отображать определенные свойства компьютера в командной строке. Например, мы можем оставить только значения Name и LastLogonDate в выводе, подключив команду Format-Table к основному синтаксису:
Get-ADComputer -Identity DC01 -Properties * | Format-Table Name, LastLogonDate -Autosize
Пример вывода:
Здесь Windows PowerShell вычисляет ширину столбцов на основе фактически отображаемых данных, если мы указываем параметр AutoSize при запуске команды Format-Table. В целом, этот параметр делает столбцы читаемыми.
Однако предыдущая команда ищет только один объект компьютера в Active Directory. Поэтому, если бы мы хотели получить информацию обо всех компьютерах в домене, мы можем заменить параметр Идентификатор на Фильтр:
Get-ADComputer -Filter * -Properties * | Format-Table Name, Created -Autosize
Смотрите образец вывода:
Мы получили простой форматированный столбец, содержащий только два поля: имя компьютера и дату создания объекта. Мы можем добавить другие столбцы объекта компьютера из Active Directory в эту таблицу, добавив свойства в разделе Формат-Таблица конвейера.
В основном, чтобы получить информацию о компьютерных объектах в определенном Организационном Участке (OU), мы можем использовать параметр –SearchBase.
Get-ADComputer -SearchBase ‘OU=IT,DC=infrasos,DC=com’ -Filter * -Properties * | Format-Table Name, Created -Autosize
Кроме того, мы также можем сортировать результаты запроса, вставляя Sort-Object cmdlet в конвейер:
Get-ADComputer -Filter * -Properties * | Sort-Object Created | Format-Table Name, Created -Autosize
В предыдущей команде выше команда Sort-Object сортирует результаты команды Get-ADComputer сначала по Created, а затем передает его команде Format-Table для отображения.
Использование фильтров поиска с Get-ADComputer
Мы используем Get-ADComputer cmdlet’s -Filter аргумент для поиска нескольких AD компьютеров на основе определенных критериев. Как отмечалось, в этом случае мы можем использовать подстановочные знаки и логические операторы сравнения. Конечно, в качестве фильтров мы можем использовать только основные атрибуты объекта компьютера.
Равным образом, мы используем Where-Object конвейер, если нам нужно использовать фильтры поиска для расширенных компьютерных атрибутов. Ниже приведены более практические примеры того, как запрашивать и искать объекты компьютеров в домене с использованием Get-ADComputer командлета.
Получите общее количество всех активных и неблокированных компьютеров в Active Directory:
Мы ищем компьютеры, используя несколько фильтров одновременно. Используйте PowerShell логические операторы сравнения, чтобы достичь этого.
(Get-ADComputer -Filter {Enabled -eq "true"}).Count
Отображение всех хостов Windows Server в домене AD:
Get-ADComputer -Filter {OperatingSystem -Like '*Windows Server*' }
Получить список всех компьютеров в определенном OU, имена которых начинаются с DC:
Get-ADComputer -Filter {Name -like "DC*"} -SearchBase ‘OU=IT,DC=infrasos,DC=com’ -Properties * | Format-Table Name
При поиске в OU мы можем использовать –SearchScope1 параметр, чтобы ограничить наш поиск только корневым OU. The -SearchScope2 опция выполняет рекурсивный поиск компьютеров во всех OU.
Управление несколькими компьютерами с помощью Get-ADComputer
Мы должны использовать Foreach-Object цикл для выполнения конкретного действия для всех компьютеров в возвращаемом списке. В этом примере мы можем запрашивать несколько компьютеров AD удаленно с помощью Windows Management Instrumentation или Common Information Classes:
Get-ADComputer -Filter * -Property * |
Select-Object Name,OperatingSystem |
Foreach-Object {
Get-CimInstance Win32_Bios -ComputerName $_.Name -ErrorAction SilentlyContinue |
Select-Object PSComputerName
}
Очевидно, в этом примере, если мы хотим получить список хостов Windows Server в домене, вместе с их моделью и производителем, мы используем тот же метод цикла и получаем свойства компьютера.
$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-Output "Name: $Hostname"
Write-Output "Manufacturer: $Manufacturer"
Write-Output "Model: $Model"
Write-Output " "
}
Итак, информация, извлеченная из приведенных выше примеров, доступна через службы домена domain, поскольку эти компьютеры являются частью AD. Однако не все компьютеры публикуют свои свойства в домене. Как мы можем их извлечь?
Далее мы используем Invoke-Command. Таким образом, этот командлет PowerShell выполняет локальные команды на удаленном компьютере. Например, предположим, что нам нужно запустить определенную команду на всех компьютерах в определенной OU. В этом примере давайте использовать Invoke-Command для запуска обновления групповой политики на всех серверах:
Get-ADComputer -SearchBase "OU=DC,DC=infrasos,DC=com" -Filter * |
%{ Invoke-Command -Computer $_.Name -ScriptBlock { gpupdate /force } }
Также читайте Попробуйте инструмент отчетов групп Active Directory
Создание отчетов PowerShell AD с помощью Get-ADComputer
В Windows PowerShell мы экспортируем вывод наших команд в несколько форматов отчетов. Вот некоторые из примеров ниже.
Во-первых, мы экспортируем результат команды Get-ADComputer в текстовый файл:
Get-ADComputer -Filter { OperatingSystem -Like '*Windows Server 2019*' } -Properties * |
Select Name, OperatingSystem |
Format-Table -AutoSize C:\Temp\2019_servers.txt
Во-вторых, мы также получаем список всех компьютеров и экспортируем его в значения, разделенные запятыми(CSV) файл:
Get-ADComputer -Filter * -Property * |
Select-Object Name,OperatingSystem |
Export-CSV All-Computers.csv -NoTypeInformation
Третье, мы также можем экспортировать наш отчет и получить формат веб-страницы HTML со списком всех компьютеров и основными свойствами:
Get-ADComputer -Filter * -Properties * |
Select-Object Name,OperatingSystem |
ConvertTo-Html |
Out-File C:\ps\ad_all_computers.html
Это должно выглядеть примерно так:
Спасибо за чтение Создание отчетов о компьютерах Active Directory с помощью PowerShell. Мы заключаем.
Также читайте Развертывание мониторинга Azure AD
Заключение по созданию отчетов о компьютерах Active Directory с использованием Powershell
В этой статье мы подробно обсудили команду Get-ADComputer. Мы узнали, что с помощью этой команды мы можем получить подробный список свойств и информации о конкретном компьютере. Более того, с исчерпывающим списком мы узнали, как отфильтровать эти свойства, чтобы получить только нужную нам информацию.
Source:
https://infrasos.com/create-active-directory-computer-reports-with-powershell/