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

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»

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

Обратите внимание, что в параметре 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)

Читайте также:
Настройка SSH подключений в Visual Studio Code

$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 }}
}

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

По аналогии вы можете получить любые другие атрибуты пользователей из 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

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

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

Можно экспортировать получившийся список пользователей и групп в 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

Читайте также:
Ошибка 0x00000057 при установке сетевого принтера в Windows

Удалить пользователей из группы локальных администраторов 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}
}

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

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

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

Оцените статью
( Пока оценок нет )
Поделиться с друзьями
Информационный блог про Windows
Добавить комментарий