PowerShell: Get-ADComputer – получение данных о компьютерах в Active Directory | Windows для системных администраторов

PowerShell: Get-ADComputer – получение данных о компьютерах в Active Directory

Продолжаем знакомиться с полезными командлетами PowerShell для работы с Active Directory. В прошлой статье мы поговорили о командлете Get-ADUser, позволяющем получать любую информацию об учетных записях пользователей AD. Сегодня речь пойдет о командлете Get-ADComputer и его использовании для получения данных об учётных записях компьютеров в Active Directory.

Поставим для себя практическую задачу: с помощью Powershell нужно получить список учетных записей компьютеров, не регистрировавшихся в домене более 120 дней (неактивные компьютеры) и отключить их.

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

Import-Module activedirectory

Совет. В PowerShell 3.0 (представлен в Windows Server 2012 ) и выше этот модуль подключается по умолчанию

Справка о параметрах командлета Get-ADComputer вызывается стандартно:

Get-Help Get-ADComputer

Get-Help Get-ADComputerЧтобы получить информацию о конкретном компьютере укажем его имя с параметром -Identity:

Get-ADComputer -Identity SRV-DB01

Get-ADComputer -IdentityНас интересует время его последней регистрации в AD, но этой информация в выводе команды нет. Выведем все свойства компьютера в Active Directory:

Get-ADComputer -Identity SRV-DB01 -Properties *

Get-ADComputer все параметры компьютера в Active DirectoryКак мы видим, время последней входа в сеть (LastLogonDate)– 21.09.2015 0:20:17

Уберем всю лишнюю информацию, оставив только значение полей Name и LastLogonDate.

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

Табличное представление Get-ADComputer Далее нужно поправить команду так, чтобы она выводила искомую информацию обо всех компьютерах домена. Для этого заменим параметр –Identity на -Filter:

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

Получаем время входа для всех компьютеров доменаЧтобы вывести данные о компьютерах в определенном 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

Сортировка по полю lastlogondate

Итак, мы получили список компьютеров и время их последнего входа в домен Active Directory, теперь мы хотим заблокировать учетные записи компьютеров, не использовавшихся более 120 дней.

С помощью Get-Date получим в переменной значение текущей даты и уменьшим ее на 120 дней:

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

Get-Date adddaysПолученную переменную с датой можно использовать в качестве фильтра запроса Get-ADComputer  по полю LastLogonDate

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

Таким образом, мы получили список компьютеров, не регистрировавшихся в сети более 120 дней. С помощью команды 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

Еще несколько полезных приемов по работе с командой Get-ADComputer

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

Get-ADComputer -Filter {SamAccountName -like "*"} | Measure-Object

Выбрать все компьютеры с ОС Windows XP:

Get-ADComputer -Filter {OperatingSystem -like '*XP*'}

Выбрать только серверные системы:

Get-ADComputer -Filter { OperatingSystem -Like '*Windows Server*' } -Properties OperatingSystem | Select Name, OperatingSystem | Format-Table -AutoSize

Результаты выполнения команды можно выгрузить в текстовый файл:

Get-ADComputer -Filter { OperatingSystem -Like '*Windows Server*' } -Properties OperatingSystem | Select Name, 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

Еще записи по теме: PowerShell
Понравилась статья? Скажи спасибо и расскажи друзьям!
Назад:
Вперед:

Комментариев: 17

Оставить комментарий
  1. Dganic | 01.10.2015

    Не подскажите почему не работает? Windows Server 2012R2 в домене:

    PS C:\Users\aaa> Import-Module activedirectory
    Import-Module : Указанный модуль «activedirectory» не был загружен, так как ни в одном из каталогов модулей не был обна
    ружен действительный файл модуля.
    строка:1 знак:1
    + Import-Module activedirectory
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : ResourceUnavailable: (activedirectory:String) [Import-Module], FileNotFoundException
    + FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand

    PS C:\Users\aaa> Get-ADComputer -Identity w302028
    Get-ADComputer : Имя «Get-ADComputer» не распознано как имя командлета, функции, файла сценария или выполняемой програм
    мы. Проверьте правильность написания имени, а также наличие и правильность пути, после чего повторите попытку.
    строка:1 знак:1
    + Get-ADComputer -Identity w302028
    + ~~~~~~~~~~~~~~
    + CategoryInfo : ObjectNotFound: (Get-ADComputer:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

    PS C:\Users\aaa>

    Ответить
  2. Sasha Odarchuk | 10.10.2016

    Как узнать кто ввел ПК из ОУ domain.local/Computers в домен?

    Ответить
    • itpro | 10.10.2016

      Официального способа узнать кто ввел ПК в домен не знаю. В некоторых случаях полезная информация может быть на вкладке Security объекта в домене. Посмотрите есть ли в списке ACL персонально чья-то учетная запись, права которой не наследованы с верхнего уровня. Скорее всего это и есть пользователь, который ввел компьютер в домен

      Ответить
      • equinox | 13.10.2016

        Я применяю триггер в журнале событий, срабатывающий при возникновении EventID 4741:

        Get-WinEvent -maxevents 1 -FilterHashtable @{LogName = «Security»;ID = 4741;StartTime = (Get-Date).AddSeconds(-120)} | Select TimeCreated, `
        @{n = «Computer name»;e = {([xml]$_.ToXml()).Event.EventData.Data | ? {$_.Name -eq «TargetUserName»} | %{$_.’#text’}}}, `
        @{n = «Created by»;e = {([xml]$_.ToXml()).Event.EventData.Data | ? {$_.Name -eq «SubjectUserName»} | %{$_.’#text’}}}, `
        @{n=»DC»;e={([xml]$_.ToXml()).Event.System.Computer}}

        где Created by (SubjectUserName) и есть та учетка, от имени которой вводили компьютер в домен.

        Ответить
      • Борис | 02.11.2016

        Скажите пожалуйста вот есть команда:
        Get-ADComputer -Filter * -Property * | Select-Object Name,OperatingSystem,OperatingSystemServicePack,IPv4Address,Description| Export-CSV All-Windows.csv -NoTypeInformation -Encoding UTF8
        Как еще можно в этот же файл добавить данные из учетки Job Title, Departament.
        То есть можно ли за раз файл получить — ip, имя компьютера, описание, должность, отдел, ОС, версия сервис пака

        Ответить
        • itpro | 08.11.2016

          Тут не понятно, как вы хотите сопоставлять компьютер с пользователем (какой пользователь работает за каким компьютером)
          Как вариант — настроить логон скрипт, чтобы он сохранял в поле компьютеры descriptoin имя текущего пользователи при входе в систему

          Ответить
  3. Иван | 02.12.2016

    Возможно ли в PS выяснить какой из пользователей и на каком компьютере авторизовывался и время входа? Спасибо!

    Ответить
    • itpro | 06.12.2016

      В AD этой информации нет, но можно написать собственные Logon скрипты, которые бы записывали данные в учетные записи AD пользователей и компьютеров. Тогда в дальнейшем с помощью PowerShell можно будет без труда собрать эти данные

      Ответить
  4. Луле | 18.02.2017

    Добрый день! Как сделать запрос ,чтобы узнать какие компьютеры входили в домен например 15.02.2017? Заранее спасибо за ответ.

    Ответить
    • itpro | 21.02.2017

      $Search_From= [datetime]»02/15/2017 00:00:00″
      $Search_To= [datetime]»02/16/2017 00:00:00″
      Get-ADComputer -Properties LastLogonDate -Filter {LastLogonDate -gt $Search_From -AND LastLogonDate -lt $Search_To } | Sort LastLogonDate | FT Name, LastLogonDate -Autosize

      Ответить
  5. Ираклий | 24.05.2017

    Есть команда Get-Item -Path ‘Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion’
    в ее выводе есть строка UBR, которая показывает версию сборки ОС
    Как мне собрать инфу в домене по сборкам ОС из файла, в котором перечислены нужные для аудита сети? Спасибо

    Ответить
    • Луле | 24.05.2017

      Get-ADComputer -Filter * -Property * | Format-Table Name,OperatingSystem,OperatingSystemServicePack,OperatingSystemVersion -Wrap –Auto > C:\temp\comps.txt просмотр всех компьютеров в домене и их имен операционных систем их версий ,сервис пак.

      Ответить
    • Луле | 24.05.2017

      Get-ADComputer -Filter * -Property * | Format-Table Name,OperatingSystem,OperatingSystemServicePack,OperatingSystemVersion -Wrap –Auto > C:\temp\comps.txt просмотр всех компьютеров в домене и их имен операционных систем их версий ,сервис пак. В статье выше написано про это. Читайте внимательно.

      Ответить
      • Ираклий | 25.05.2017

        Это я пробовал и выдает он полную инфу
        C100 Windows 10 Pro 10.0 (10586)
        А мне нужен чтобы было C100 Windows 10 Pro 10.0 (10586.916)
        Мне нужна полная версия ОС
        Выполните мою команду и увидите доп строки. Вот как мне добиться получения полного вывода об ОС? Спасибо!

        Ответить
        • itpro | 25.05.2017

          Из AD вы не получите полный номер сборки ОС. Он там просто не хранится.
          В вашем случае вероятно, придется скриптом через WMI / PowerShell Remoting подключатся к каждому компьютеру из списка (или из AD) и проверять значение нужно ключа (естественно ПК должны быть доступны по сети).

          Ответить
          • Ираклий | 25.05.2017

            Мне не принципиально брать это из АД.
            Мне нужен рабочий скрипт, который обошел бы все доступные ПК из файла (либо по именам ПК, либо по ip адресам) и результат в файлик положить. Вот таких нет наработок?

            Ответить
            • equinox | 25.05.2017

              Я бы делал как-то так (при условии, что у вас на компьютерах включен winrm):

              cls
              function Test-Host ($Name)
              {
              $ping = new-object System.Net.NetworkInformation.Ping
              trap {Write-Verbose «Ошибка пинга»; $False; continue}
              if ($ping.send($Name).Status -eq «Success» ) { $True }
              else { $False }
              }

              #Зададим корневое OU, с которого будет начат поиск компьютеров
              $SearchRoot=»OU=Workstations,DC=CORP,DC=DOMAIN,DC=RU»
              $Comps = Get-ADComputer -ErrorAction SilentlyContinue -SearchBase $SearchRoot -Filter *
              # Или берем из текстового файла
              # $Comps = get-content comps.txt
              foreach ($Comp in $Comps){
              if (Test-Host $Comp.Name) {
              $CompName = $Comp.Name
              Write-Host $CompName
              Invoke-Command -ComputerName $CompName -ScriptBlock {(Get-ItemProperty -Path ‘Registry::HKLM\Software\Microsoft\Windows NT\CurrentVersion’).UBR}
              }
              }

Полные правила комментирования на сайте winitpro.ru. Вопросы, не связанные с содержимым статьи или ее обсуждением удаляются.

Сказать Спасибо! можно на этой странице или (еще лучше) поделиться с друзями ссылкой на понравившуюся статью в любимой социальной сети(специально для этого на сайте присуствуют кнопки популярных соц. сетей).

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)



MAXCACHE: 0.27MB/0.00109 sec