Страница 1 из 1

WinServer-ActiveDirectory: Найти компьютеры по типу

Добавлено: 23 мар 2017, 18:33
xor
Источник: https://habrahabr.ru/company/netwrix/blog/160837/
Офтопик

Для реализации описанного процесса необходимо соблюдение определенных требований:
Чтобы использовать PowerShell для управления AD, нужно соблюсти несколько требований. Я собираюсь продемонстрировать, как командлеты для AD работают на примере компьютера на Windows 7.
Чтобы использовать командлеты, контроллер домена у Вас должен быть уровня Windows Server 2008 R2, или же Вы можете скачать и установить Active Directory Management Gateway Service на наследуемых контроллерах домена (legacy DCs). Внимательно прочитайте документацию перед установкой; требуется перезагрузка КД.
На стороне клиента, скачайте и установите Remote Server Administration Tools (RSAT) либо для Windows 7, либо для Windows 8. В Windows 7, Вам необходимо будет открыть в Панели управления (Control Panel) раздел Программы (Programs) и выбрать Включить или выключить функции Windows (Turn Windows Features On or Off). Найдите Remote Server Administration Tools и раскройте раздел Role Administration Tools. Выберите подходящие пункты для AD DS and AD LDS Tools, особенно обратите внимание на то, что должен быть выбран пункт Active Directory Module for Windows PowerShell, как показано на рисунке 1. (В Windows 8 все инструменты выбраны по умолчанию). Теперь мы готовы работать.

Я вошел в систему под учетной записью с правами доменного администратора. Большинство командлетов, которые я буду показывать, позволят Вам уточнить альтернативные полномочия (credentials). В любом случае я рекомендую прочитать справку (Get-Help) и примеры, которые я буду демонстрировать ниже.
Начните сессию PowerShell и просмотрите список модулей:
PS C:\> Get-Module -listavailable
импортируйте модуль AD:
PS C:\> Import-Module ActiveDirectory
В результате импорта создается новый PSDrive, но мы не будем использовать его. Однако, Вы можете посмотреть, какие команды имеются в импортированном модуле.
PS C:\> get-command -module ActiveDirectory
Прелесть этих команд в том, что если я могу использовать команду для одного объекта AD, то ее можно использовать для 10, 100 и даже 1000. Посмотрим, как некоторые из этих командлетов работают.
Как найти учетные записи компьютеров по типу, например, серверы или рабочие станции. С вашей стороны это требует определенной креативности. В AD нет ничего такого, чтобы отличало сервер от клиента, разве что ОС. Если Ваш компьютер работает под Windows Server 2008, придется слегка сделать несколько дополнительных действий.
Для начала необходимо получить список ОС, а затем осуществляем фильтрацию учетных записей по имеющимся ОС.

PS C:\> Get-ADComputer -Filter * -Properties OperatingSystem | Select OperatingSystem -unique | Sort OperatingSystem

Результаты показаны ниже.

Код: Выделить всё

OperatingSystem
---------------

Windows 10 Pro
Windows 7 Professional
Windows 7 Корпоративная
Windows 7 Профессиональная
Windows 8.1 Профессиональная
Windows Server 2008 R2 Enterprise
Windows Server 2008 R2 Standard
Windows Server 2012 R2 Standard
Windows XP Professional
Я хочу найти все компьютеры, на которых стоит серверная ОС:

PS C:\> Get-ADComputer -Filter "OperatingSystem -like '*Server*'" -properties OperatingSystem,OperatingSystemServicePack | Select Name,Op* | format-list

Результаты ниже.

Код: Выделить всё

Name                       : MSK-CO-DC004
OperatingSystem            : Windows Server 2008 R2 Standard
OperatingSystemServicePack : Service Pack 1

Name                       : MSK-CO-DC001
OperatingSystem            : Windows Server 2008 R2 Enterprise
OperatingSystemServicePack : Service Pack 1

Name                       : MSK-CO-DBA005
OperatingSystem            : Windows Server 2008 R2 Standard
OperatingSystemServicePack : Service Pack 1

Name                       : MSK-CO-APP001
OperatingSystem            : Windows Server 2008 R2 Enterprise
OperatingSystemServicePack : Service Pack 1

Name                       : MSK-CO-DBA011
OperatingSystem            : Windows Server 2008 R2 Standard
OperatingSystemServicePack : Service Pack 1

Name                       : MSK-CO-MX002
OperatingSystem            : Windows Server 2008 R2 Enterprise
OperatingSystemServicePack : Service Pack 1

Name                       : MSK-CO-DBA010
OperatingSystem            : Windows Server 2008 R2 Enterprise
OperatingSystemServicePack : Service Pack 1

Name                       : MSK-CO-DBA002
OperatingSystem            : Windows Server 2008 R2 Standard
OperatingSystemServicePack : Service Pack 1

Name                       : MSK-CO-VOICE001
OperatingSystem            : Windows Server 2008 R2 Standard
OperatingSystemServicePack : Service Pack 1
Как и другими командлетами AD Get, Вы можете настроить поисковые параметры и ограничить запрос отдельными OU, если это необходимо. Все выражения, которые я показал, могут быть интегрированы в большие PowerShell выражения. Например, Вы можете сортировать, группировать, применять фильтры, экспортировать в CSV или создавать и отправлять на почту HTML отчеты – и все это из PowerShell! При этом Вам не придется писать ни единого скрипа.
Вот Вам бонус: отчет о возрасте пароля пользователя (user password-age report), сохраненный в HTML файле:

PS C:\> Get-ADUser -Filter "Enabled -eq 'True' -AND PasswordNeverExpires -eq 'False'" -Properties PasswordLastSet,PasswordNeverExpires,PasswordExpired | Select DistinguishedName,Name,pass*,@{Name="PasswordAge";Expression={(Get-Date)-$_.PasswordLastSet}} |sort PasswordAge -Descending | ConvertTo-Html -Title "Password Age Report" | Out-File c:\pwage.htm

Хотя это выражение может выглядеть слегка пугающим, при минимальном знании PowerShell им легко воспользоваться. И остается лишь последний совет: как определить кастомное свойство под названием PasswordAge. Значение представляет собой промежуток между сегодняшним днем и свойством PasswordLastSet. Затем я сортирую результаты для моего нового свойства. На рисунке 9 показан выход для моего небольшого тестового домена.