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
Понравилась статья? Скажи спасибо и расскажи друзьям!
Назад:
Вперед:

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

Оставить комментарий
  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 можно будет без труда собрать эти данные

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

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

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

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



MAXCACHE: 0.26MB/0.00109 sec