Поиск по сайту:

Get-ADComputer - Как найти и экспортировать компьютеры AD с помощью PowerShell


Необходимо экспортировать все компьютеры из организационной единицы (OU) или найти компьютер в вашей Active Directory? Или вы хотите подсчитать, сколько у вас компьютеров? Мы можем использовать командлет Get-ADComputer в PowerShell, чтобы быстро извлечь информацию о компьютерах из AD.

Active Directory содержит все компьютеры, которые являются членами нашего домена. Консоль управления отлично подходит для поиска одного компьютера. Но когда вы хотите получить информацию о одном или нескольких компьютерах, нам нужно использовать PowerShell.

В этой статье мы рассмотрим, как использовать командлет Get-ADComputer в PowerShell. Я также приведу вам несколько полезных примеров, когда дело касается поиска и экспорта компьютеров Active Directory. И в качестве бонуса я добавил полный скрипт для экспорта ваших компьютеров Active Directory.

Установите модуль Active Directory

Чтобы иметь возможность использовать командлет Get-ADComputer в PowerShell, вам необходимо установить модуль Active Directory. По умолчанию он установлен на контроллере домена, но на Windows 10 или 11 вам нужно будет его установить.

Вы можете выполнить следующую команду PowerShell в Windows 10 или 11 для установки модуля:

Add-WindowsCapability -online -Name “Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0”

Поиск компьютеров с помощью Get-ADComputer в PowerShell

Командлет Get-ADComputer позволяет нам находить объекты компьютеров в Active Directory и извлекать из них информацию. Истинная сила этого командлета заключается в том, что он предлагает различные параметры для поиска этих объектов компьютеров.

У нас есть следующие варианты, когда дело касается поиска объектов:

  • Идентичность - Найдите компьютеры по их имени. Это вернет только один компьютер.
  • Фильтр – Извлечение нескольких объектов на основе запроса
  • LDAPФильтр - Используйте строку запроса LDAP для фильтрации объектов компьютера
  • SearchBase – Укажите путь Active Directory (OU) для поиска
  • SearchScope – Укажите, насколько глубоко вы хотите производить поиск (базовый уровень, один уровень или полное поддерево)

Параметр идентификации в основном используется, когда вы знаете SAMAccountName компьютера (имя компьютера). Это позволяет вам выбрать один компьютер из Active Directory и просмотреть свойства учетной записи.

Get-ADComputer -identity la-computer-22

Получить-АДКомпьютер

Это вернет основные свойства компьютера. Мы можем использовать параметр -properties, чтобы получить больше информации о компьютере. Я объясню подробнее о получении различных свойств позже в статье, но если вы хотите увидеть всю возможную информацию о компьютерной учетной записи, используйте следующую команду:

Get-ADComputer -identity la-computer-22 -properties *

Получить базу поиска ADComputer

Чаще всего, когда вы хотите извлечь компьютеры из Active Directory, вы хотите уточнить базу поиска по организационным единицам (OU). Для этого мы можем использовать параметр -SearchBase для команды Get-ADComputer. Это позволяет нам указать OU (distinguishedName), где мы хотим провести поиск.

distinguishedName - это полный путь OU, который мы расписываем от OU вверх по дереву до имени домена AD.

Возьмите следующую структуру AD, мы хотим получить все компьютеры из амстердамского сайта:

Поиск База Путь

Базовая строка поиска в данном случае будет следующей:

    1              2           3         4        5
"OU=Computers,OU=Amsterdam,OU=Sites,DC=Lazyadmin,DC=NL"

Таким образом, чтобы получить все компьютеры с сайта Амстердама, мы можем использовать следующую команду PowerShell:

Get-ADComputer -Filter * -SearchBase "OU=Computers,OU=Amsterdam,OU=Sites,DC=Lazyadmin,DC=NL" | ft

Использование области поиска

Параметр -SearchBase вернет все компьютеры из указанного и вложенных OU. Используя параметр -SearchScope, мы можем указать, насколько глубоко или не глубоко мы хотим искать в дереве Active Directory.

Скажем, мы хотим получить все компьютеры из Амстердама, кроме компьютеров, которые есть в наличии:

Если мы будем использовать базу поиска, которую мы создали ранее, то будут возвращены все компьютеры, включая те, что на складе, всего 15 компьютеров.

$searchBase = "OU=Computers,OU=Amsterdam,OU=Sites,DC=Lazyadmin,DC=NL"

$computers = Get-ADComputer -Filter * -SearchBase $searchBase
$computers.count   # Returns 15

Чтобы исключить компьютеры, которые находятся на складе, мы можем использовать параметр SearchScope. Это позволяет ограничить область поиска только текущим уровнем:

$searchBase = "OU=Computers,OU=Amsterdam,OU=Sites,DC=Lazyadmin,DC=NL"

$computers = Get-ADComputer -Filter * -SearchBase $searchBase -SearchScope OneLevel
$computers.count    # Returns 12

Используя параметр Фильтр

Команда Get-ADComputer также является отличным способом найти один или несколько компьютеров в вашем AD. Хотя объект компьютера не содержит много информации, мы все равно можем использовать несколько свойств для фильтрации.

Давайте посмотрим на несколько часто используемых примеров поиска компьютеров:

Мы можем найти компьютер на основе части имени компьютера с помощью фильтра -like:

Get-ADComputer -Filter "Name -like '*workstation*'" | ft

Обратите внимание на подстановочный знак, это значит, что перед и после слова "рабочая станция" может быть что-то.

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

Active Directory также отслеживает все операционные системы на компьютерах. Так что мы также можем получить все компьютеры, на которых работает Windows 10 Pro, например:

Get-ADComputer -Filter "OperatingSystem -eq 'Windows 10 Pro'" | ft

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

Мы также можем использовать несколько условий, например, чтобы получить все компьютеры, которые работают на Windows 10 или 11:

Get-ADComputer -Filter "OperatingSystem -eq 'Windows 10 Pro' -or OperatingSystem -eq 'Windows 11 Pro'" | ft

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

Хотите узнать, сколько у вас неактивных компьютеров? Мы можем отфильтровать компьютеры AD по дате последнего входа, чтобы извлечь все компьютеры, которые не использовались за последние 90 дней, например.

Для этого нам сначала нужно создать переменную даты, взяв дату с сегодняшнего дня и вычтя из нее 90 дней. Затем мы можем отфильтровать AD компьютеры по lastlogondate:

$date = (Get-Date) - (New-TimeSpan -Days 90)
Get-ADcomputer -Filter 'lastLogondate -lt $date' | ft

Select the canonicalName,lastlogondate and name for a more readable list
Get-ADcomputer -Filter 'lastLogondate -lt $date' -properties canonicalName,lastlogondate | select name,canonicalname,lastlogondate | ft -AutoSize

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

Еще один полезный пример - получить все отключенные компьютеры из OU:

Get all disabled computers
Get-ADComputer -Filter "Enabled -eq 'False'" | ft

Get only enabled computers
Get-ADComputer -Filter "Enabled -eq 'True'" | ft

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

Как упоминалось ранее в статье, объект компьютера не содержит много полезных свойств (по сравнению с объектом пользователя). Но все же есть некоторая полезная информация, которую можно извлечь из объекта.

Не указывая свойства, вы получаете только информацию, связанную с именем компьютера и distinguishedname. Но другие полезные свойства, например, такие как:

  • Недопустимый счетчик попыток входа
  • Неверное количество паролей
  • IPv4Адрес
  • Включено
  • Последний выход
  • Дата последнего входа
  • LogonCount
  • OperatingSystem
  • ВерсияОперационнойСистемы
  • WhenCreated

Чтобы получить эту информацию, мы можем использовать параметр -properties:

Get-ADComputer -identity la-computer-22 -Properties IPv4Address,LastLogonDate,OperatingSystem,OperatingSystemVersion,WhenCreated

Экспортировать компьютер AD в CSV с помощью PowerShell

Экспорт результатов в PowerShell в CSV довольно распространен. Мы все часто используем PowerShell, чтобы получить информацию, а затем обрабатывать ее в Excel. Я написал полное руководство по команде Export-CSV, но я также хочу привести вам пару полезных примеров работы с командой Get-ADComputer.

Чтобы просто экспортировать все объекты компьютеров AD, мы можем использовать следующую команду:

Get-ADComputer -filter * | Export-CSV c:\temp\computers.csv -NoTypeInformation

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

Выберите свойства, которые нам нужны

Итак, первый шаг — это указать поля, которые мы действительно хотим экспортировать. Например, если мы хотим экспортировать имя, каноническое имя, операционную систему и дату последнего входа, мы можем использовать следующую команду:

Get-ADComputer -filter * -properties canonicalname,operatingsystem,LastLogonDate | select name,canonicalname,operatingsystem,LastLogonDate | Export-CSV c:\temp\computers.csv -NoTypeInformation

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

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

Get-ADComputer -filter "Enabled -eq 'true'" -properties canonicalname,operatingsystem,LastLogonDate | select name,canonicalname,operatingsystem,LastLogonDate | Export-CSV c:\temp\computers.csv -NoTypeInformation

Скрипт для экспорта компьютеров AD в CSV

Я создал скрипт PowerShell, который экспортирует все компьютеры AD в CSV с наиболее необходимыми свойствами.

Когда вы запускаете скрипт, вы указываете несколько параметров:

  • Укажите базу поиска (OU), по умолчанию - весь Active Directory
  • Получить включенные или выключенные компьютеры или и то, и другое (по умолчанию только включенные)
  • Экспортировать путь к файлу CSV (местоположение скрипта по умолчанию)

Скрипт получит все учетные записи пользователей из активного каталога, если вы не укажете searchBase (OU). Также можно указать несколько OU:

.\Get-ADComputers.ps1 -searchBase "OU=computers,OU=Amsterdam,DC=LazyAdmin,DC=Local","OU=computers,OU=Oslo,DC=LazyAdmin,DC=Local" -CSVpath c:\temp\computers.csv

Следуйте этим шагам, чтобы экспортировать компьютеры AD с помощью скрипта PowerShell:

  1. Скачайте полный скрипт Export AD Computers из моего Github
  2. Откройте PowerShell и перейдите к скрипту
  3. Запустите скрипт экспорта: Get-ADComputers.ps1

Когда скрипт завершит выполнение, он автоматически откроет Excel для вас.

<#
.SYNOPSIS
  Get all AD Computers with properties and export to CSV
.NOTES
  Version:        1.2
  Author:         R. Mens
  Creation Date:  24 may 2022
  Purpose/Change: Fix enabled/disable filter
#>
param(
  [Parameter(
    Mandatory = $false,
    HelpMessage = "Enter the searchbase between quotes or multiple separated with a comma"
    )]
  [string[]]$searchBase,

  [Parameter(
    Mandatory = $false,
    HelpMessage = "Get computers that are enabled, disabled or both"
  )]
    [ValidateSet("true", "false", "both")]
  [string]$enabled = "true",

  [Parameter(
    Mandatory = $false,
    HelpMessage = "Enter path to save the CSV file"
  )]
  [string]$CSVpath
)

Function Get-Computers {
    <#
    .SYNOPSIS
      Get computers from the requested DN
    #>
    param(
      [Parameter(
        Mandatory = $true
      )]
      $dn
    )
    process{
      # Set the properties to retrieve
      $properties = @(
        'Name',
        'CanonicalName',
        'OperatingSystem',
        'OperatingSystemVersion',
        'LastLogonDate',
        'LogonCount',
        'BadLogonCount',
        'IPv4Address',
        'Enabled',
        'whenCreated'
      )

      # Get enabled, disabled or both computers
      switch ($enabled)
      {
        "true" {$filter = "enabled -eq 'true'"}
        "false" {$filter = "enabled -eq 'false'"}
        "both" {$filter = "*"}
      }

      # Get the computers
      Get-ADComputer -Filter $filter -searchBase $dn -Properties $properties | Select-Object $properties
    }
}


Function Get-AllADComputers {
  <#
    .SYNOPSIS
      Get all AD computers
  #>
  process {
    Write-Host "Collecting computers" -ForegroundColor Cyan
    $computers = @()

    # Collect computers
    if ($searchBase) {
      # Get the requested mailboxes
       foreach ($dn in $searchBase) {
         Write-Host "- Get computers in $dn" -ForegroundColor Cyan
         $computers += Get-Computers -dn $dn
       }
     }else{
       # Get distinguishedName of the domain
       $dn = Get-ADDomain | Select-Object -ExpandProperty DistinguishedName
       Write-Host "- Get computers in $dn" -ForegroundColor Cyan
       $computers += Get-Computers -dn $dn
     }
 

    # Loop through all computers
    $computers | ForEach-Object {

      [pscustomobject]@{
        "Name" = $_.Name
        "CanonicalName" = $_.CanonicalName
        "OS" = $_.OperatingSystem
        "OS Version" = $_.OperatingSystemVersion
        "Last Logon" = $_.lastLogonDate
        "Logon Count" = $_.logonCount
        "Bad Logon Count" = $_.BadLogonCount
        "IP Address" = $_.IPv4Address
        "Mobile" = $_.mobile
        "Enabled" = if ($_.Enabled) {"enabled"} else {"disabled"}
        "Date created" = $_.whenCreated
      }
    }
  }
}

If ($CSVpath) {
  # Get all AD Computers
  Get-AllADComputers | Sort-Object Name | Export-CSV -Path $CSVpath -NoTypeInformation -Encoding UTF8
  if ((Get-Item $CSVpath).Length -gt 0) {
    Write-Host "Report finished and saved in $CSVpath" -ForegroundColor Green
  
    # Open the CSV file
    Invoke-Item $CSVpath
  
  }else{
    Write-Host "Failed to create report" -ForegroundColor Red
  }
}
Else {
  Get-AllADComputers | Sort-Object Name
}

Завершение

Команда Get-ADComputer действительно полезна, когда дело касается извлечения компьютеров из Active Directory. Использование параметра searchbase позволяет вам быстро выбрать нужный компьютер из указанного OU.

Чтобы экспортировать компьютеры AD в CSV, вы можете попробовать скрипт. Вы можете легко изменить свойства, которые он извлекает, под свои нужды.

Если у вас есть вопросы, просто оставьте комментарий ниже.