Создание отчетов о компьютерах Active Directory с помощью PowerShell

Создание отчетов об объектах компьютеров Active Directory с помощью PowerShell. Чтобы найти что-либо относительно объектов компьютеров в активном каталоге (AD) и их свойств, мы в основном будем использовать командлет Get-ADComputer. Например, в домене Active Directory мы можем использовать командлет Get-ADComputer PowerShell для получения информации о объектах учетной записи компьютера (серверы и рабочие станции). Этот командлет является одним из наиболее полезных для поиска компьютеров AD по различным критериям.

В этой статье рассматриваются множественные применения командлета Get-ADComputer и как мы можем превратить его в полноценный и ценный отчет.

Давайте начнем с блога статьи Создание отчетов об объектах компьютеров Active Directory с помощью PowerShell.

Создание отчетов Active Directory о компьютерах с помощью Powershell

Предварительные требования

Если вы хотите следовать примерам скриптов в этой статье, убедитесь, что у вас есть следующее:

Ну, как создать отчеты 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 } }

Создание отчетов 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. Мы заключаем.

Заключение по созданию отчетов о компьютерах Active Directory с использованием Powershell

В этой статье мы подробно обсудили команду Get-ADComputer. Мы узнали, что с помощью этой команды мы можем получить подробный список свойств и информации о конкретном компьютере. Более того, с исчерпывающим списком мы узнали, как отфильтровать эти свойства, чтобы получить только нужную нам информацию.

Подводя итог, мы также узнали, как превратить запрос cmdlet в более полезную команду, которую мы можем использовать для передачи команд удаленно. Наконец, мы теперь можем генерировать наши отчеты в нескольких форматах с учетом всей этой информации.

Source:
https://infrasos.com/create-active-directory-computer-reports-with-powershell/