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

В этой статье мы рассмотрим, как получить списки пользователей и групп, которым предоставлены права локальных администраторов на компьютерах и серверах Windows в вашей сети.

Просмотр локальных администраторов на локальном компьютере

В Windows вы можете просмотреть, добавить или удалить пользователей в локальной группе Administrators с помощью оснастки управления компьютером ( compmgmt.msc ). Разверните Computer Management -> Local users and Group -> Groups . Выберите группу Administrator .

По умолчанию на компьютере Windows, который добавлен в домен Active Directory, права администратора предоставляются локальным администраторам и доменной группе Domain Admins .

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

Чтобы вывести состав локальной группы Administrators, можно воспользоваться командлетом Get-LocalGroupMember из встроенного модуля Microsoft.PowerShell.LocalAccounts .

Get-LocalGroupMember -Group "Administrators"

Обратите внимание, что в параметре Principal указан источник данного пользователя/группы. Это может быть Local, домен Active Directory или Azure AD.

Чтобы вывести только локальных пользователей с правами администратора:

Get-LocalGroupMember Administrators | Where-Object { (Get-LocalUser $_.SID -ErrorAction SilentlyContinue).Enabled }

Можно отфильтровать только пользователей из AD:

Get-LocalGroupMember Administrators | Where-Object {$_.PrincipalSource -eq "ActiveDirectory"} | select PrincipalSource,class,name,SID

Если на компьютере установлен модуль Active Directory for Windows PowerShell из пакета RSAT , вы можете получить дополнительную информацию о пользователях или группах AD по их SID .

В данном примере скрипт получит членов всех групп Active Directory, которые входят в состав локальных администраторов (список пользователей в группе AD получаем с помощью команды Get-ADGroupMember ). Затем с помощью Get-ADUser мы получим SamAccountName и состояние учетной записи (Enabled = True/False)

$admins=Get-LocalGroupMember Administrators | Where-Object {$_.PrincipalSource -eq "ActiveDirectory"}
Foreach ($admin in $admins)
{
If ($admin.objectclass –eq "User") {get-aduser $admin.sid|select SamAccountName,enabled }
If ($admin.objectclass –eq "Group") {Get-ADGroupMember $admin.sid | foreach { Get-ADUser $_ |Select-Object SamAccountName,enabled }}
}

По аналогии вы можете получить любые другие атрибуты пользователей из Active Directory.

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

Рассмотренные выше пример позволяют получить список пользователей с правами администратора на локальном компьютере. Теперь рассмотрим, как удаленно получить состав группы локальных администраторов.

Для запуска команд на удаленных компьютерах должен быть настроен PowerShell Remoting (вы можете включить и настроить WinRM с помощью GPO ) и открыт порт файервола TCP 5985 (вы можете открыть порт в Windows Defender Firewall через GPO ).

Для выполнения команды на удаленном компьютере используется PowerShell командлет Invoke-Command . Следующая команда получит список администраторов на удаленном компьютере с именем wks-t1122:

Invoke-Command -ComputerName wks-t1122 -ScriptBlock{Get-LocalGroupMember -Name 'Administrators'|select Name,ObjectClass,PrincipalSource|ft}

Теперь рассмотрим, как получить список администраторов сразу с нескольких компьютеров. Для удобства мы сразу исключим группу Domain Admins из результатов:

$results = Invoke-Command wks-t112,srv-rds2 -ScriptBlock {Get-LocalGroupMember -Name 'Administrators'|where {$_.name –notlike “*Domain Admins*”}|select Name,ObjectClass,PrincipalSource}
$results | Select-Object PSComputerName,Name,ObjectClass,PrincipalSource

Вы можете исключить из результатов встроенную учетную запись администратора , или другие аккаунты.

Можно экспортировать получившийся список пользователей и групп в CSV файл с помощью Export-CSV :

$results | Export-CSV "C:PSadmins.CSV" -NoTypeInformation -Encoding UTF8

Вы можете опросить сразу множество компьютеров или серверов из домена. В данном примере я хочу получить список админов на всех Windows Server в AD. Получим список компьютеров с помощью Get-ADComputer :

$computers = (Get-ADComputer -Filter 'operatingsystem -like "*Windows server*" -and enabled -eq "true"').Name

Теперь запросим состав группы администраторов на каждом хосте:
$results = Invoke-Command -ComputerName $computers -ScriptBlock {Get-LocalGroupMember -Name 'Administrators'|where {$_.name –notlike "*Domain Admins*"}|select Name,ObjectClass,PrincipalSource} -ErrorAction SilentlyContinue

Удалить пользователей из группы локальных администраторов Windows

Администраторам предприятия крайне важно следить за составом группы локальных администраторах на рабочих станция Windows и серверах в сети. Нужно минимизировать количество пользователей с правами администраторов.

Для автоматического добавления пользователей в группу локальных администраторов Windows рекомендуется использовать групповые политики и Restricted groups. Такие групповые политики будут автоматически добавлять необходимых пользователей в группу Administrators и исключать всех остальных (добавленных вручную).

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

Remove-LocalGroupMember -Group Administrators -Member username

Можно удалить пользователя из группы удаленно:

Invoke-Command -ComputerName wks-t1122 –ScriptBlock {Remove-LocalGroupMember -Group Administrators -Member username}

Но можно использовать более продвинутый сценарий. Допустим, вы сформировали список пользователей с правами администраторов на компьютерах и сохранили его в переменной $results.

$results = Invoke-Command wks-11,wks-22 -ScriptBlock {Get-LocalGroupMember -Name 'Administrators'|where {$_.name –notlike “*Domain Admins*”}|select Name,ObjectClass,PrincipalSource,SID}

Затем выведем список пользователей и компьютеров в виде списка Out-GridView :

$principals_to_remove=$results | Out-GridView -Title "Select principal to remove from local admins" -OutputMode Multiple

Теперь вы должны выбрать в таблице пользователей, которых нужно удалить из группы администраторов (зажмите CTRL , чтобы выделить несколько строк в таблице), и выполнить код:

foreach ($principal in $principals_to_remove)
{
Invoke-Command $principal.PSComputerName -ScriptBlock {Remove-LocalGroupMember -Group Administrators -Member $using:principal.name}
}

Примечание . Конструкция $using:principal.name позволяет передать значение локальной переменной с вашего компьютера в удаленную сессию PSRemoting.

В результате, выбранные вами пользователи будут удалены из групп локальных администраторов на удаленных компьютерах Windows.

admin

Share
Published by
admin

Recent Posts

Что такое Zulip

Zulip — программное обеспечение для реализации корпоративного чата. Разработан в 2012 году, в 2014 был…

4 дня ago

Что такое Zookeeper

Zookeeper — cервис-координатор, который позволяет обеспечить контроль синхронизации данных. Разработан на Java компанией Apache Software…

4 дня ago

Что такое Zimbra

Zimbra — программное обеспечение для реализации почтового сервиса или, если сказать точнее, автоматизации совместной деятельности…

4 дня ago

Что такое Zabbix

Zabbix — бесплатная система мониторинга. Позволяет отслеживать состояние сетевых узлов, компьютеров и серверов. Возможности: Поддержка…

4 дня ago

Что такое YouTube

YouTube — компания-владелец одноименного портала для просмотра и хранения видео. Чтобы пользоваться данным порталом достаточно…

4 дня ago

Что такое yota

Yota — провайдер, предоставляющий доступ к сети Интернет по беспроводной связи. Впервые, сервис начал работать…

4 дня ago