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

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

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

В Windows можно использовать оснастку Управление компьютером (compmgmt.msc) для просмотра, добавления или удаления пользователей в локальной группе «Администраторы». Разверните Управление компьютером -> Локальные пользователи и группа -> Группы. Затем выберите Администраторы группа.

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

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

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

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

Get-LocalGroupMember -Group "Administrators"

Get-LocalGroupMember: Получение локальных администраторов с помощью PowerShellGet-LocalGroupMember: Получение локальных администраторов с помощью PowerShell

Обратите внимание, что параметр Principal содержит источник этого пользователя/группы, который может быть локальным, 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, которые являются локальными администраторами на этом компьютере (the Get-ADGroupMember используется для получения списка пользователей групп AD). Затем используется команда Get-ADUser для получения SamAccountName и статуса учетной записи (Enabled = Правда/Ложь).

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

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

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

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

Используйте команду Invoke-Command PowerShell для выполнения команды на удаленном компьютере. Чтобы перечислить администраторов на удаленном компьютере с именем wsk-m2211, используйте следующую команду:

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

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

$results = Invoke-Command wsk-m2211,srv-sql01,srv-rds02 -ScriptBlock {Get-LocalGroupMember -Name 'Administrators'|where {$_.name –notlike "*Domain Admins*"}|select Name,ObjectClass,PrincipalSource}
$results | Select-Object PSComputerName,Name,ObjectClass,PrincipalSource

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

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

Используйте команду Export-CSV для экспорта полученного списка пользователей и групп в CSV-файл:

$results | Export-CSV "C:\PS\admins.CSV" -NoTypeInformation -Encoding UTF8

Можно одновременно запрашивать несколько компьютеров или серверов из домена. В этом примере я хочу получить список администраторов на всех узлах Windows Server в AD. Используйте команду Get-ADComputer для получения списка включенных компьютеров Windows Server в Active Directory:

$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

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

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

Рекомендуется использовать привилегии групповой политики или ограниченные группы для автоматического добавления пользователей в группу локальных администраторов. Эти GPO будут автоматически добавлять нужных пользователей в группу Administrators и исключать всех остальных пользователей (которые добавляются вручную).

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

Remove-LocalGroupMember -Group Administrators -Member username

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

Invoke-Command -ComputerName wsk-m2211 –ScriptBlock {Remove-LocalGroupMember -Group Administrators -Member username}

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

$results = Invoke-Command wsk-m2211,wsk-m2233 -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}
}

Как удалить пользователей из группы локальных администраторов с помощью PowerShell?Как удалить пользователей из группы локальных администраторов с помощью PowerShell?

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

Это удалит выбранных вами пользователей из локальной группы Administrators на удаленных компьютерах.

Добавить комментарий

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