В этой статье мы рассмотрим, как получить списки пользователей и групп, которым предоставлены права локальных администраторов на компьютерах и серверах 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 }}
}
Рассмотренные выше пример позволяют получить список пользователей с правами администратора на локальном компьютере. Теперь рассмотрим, как удаленно получить состав группы локальных администраторов.
Для запуска команд на удаленных компьютерах должен быть настроен 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 и серверах в сети. Нужно минимизировать количество пользователей с правами администраторов.
Чтобы вручную удалить пользователя из группы локальных админов, можно использовать команду:
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.
Если говорить о том, какие лучшие дистрибутивы Linux мы знаем, то этот список может быть…
Хотя Ubuntu и поставляется со встроенным обозревателем Firefox многие пользователи считают что это не самая…
Что такое Remmina? Remmina — это совершенно бесплатный и свободный клиент так называемого удаленного рабочего…
Как мы знаем, Ubuntu это самая популярная сборка из систем на базе ядра Linux. У…
Выбор ноутбука для каждого пользователя это довольно кропотливый процесс. Люди стараются подобрать ноутбук который будет…
Если вы решили ознакомиться с операционной системой Linux более детально и задались вопросом как установить…