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

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

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

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

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

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

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

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

Get-LocalGroupMember -Group "Administrators"

Get-LocalGroupMember 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 и серверах в сети. Нужно минимизировать количество пользователей с правами администраторов.

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

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.

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