Получение состава локальных групп удаленного ПК
В нашей компании принято доступ на удаленный рабочий стол навешивать только на 1 ПК одному, очень редко нескольким, пользователям. Иногда сотрудник пересаживается за другой ПК или служба безопасности спрашивает кто может подключиться к тому или иному ПК по RDP. Лезть каждый раз для решения данной задачи в консоль или удаленно подключаться к ПК и мешать сотруднику работать — себе дороже, да и как-то не особо правильно.
Имея учетную запись с правами администратора можно воспользоваться одним небольшим скриптом, который поможет достать членов локальных групп удаленного ПК.
Итак, сам скрипт и далее его маленькая модификация:
cls
$PC_name = "< ДНС имя ПК/IP адресс>"
$PC_group = "< Имя группы, которую будем просматривать>"
if (Test-Connection $PC_name -Count 1 -ErrorAction SilentlyContinue){
write-host $PC_group -BackgroundColor green
$ADSI_WinNT = [ADSI]"WinNT://$PC_name/$PC_group,group"
$ADSI_WinNT.Members() | foreach {
$member = $_.GetType().InvokeMember("AdsPath","GetProperty",$null,$_,$null).split("/")[-1]
$member
}
}
else{
Write-Host "$PC_name : НЕ ОТВЕЧАЕТ" -BackgroundColor red
}
Если необходимо в начале получить список ПК из АД, а затем последовательно подключаться к полученным ПК и выгружать состав групп, то необходимо воспользоваться следующим кодом:
#В данном примере будут получены все ПК из АД. После этого, скрипт проверяет доступность ПК по сети, если ПК не в сети, то сообщит об этом, если в сети то попытается подключиться к нему и выгрузить состав групп:"Администраторы" , "Пользователи" , "Опытные пользователи" , "Пользователи удаленного рабочего стола"
#ЗЫ. Какие группы сканировать вы указываете сами, их количество ограничено вами.
cls
$PC_group_all = @('Администраторы','Пользователи','Опытные пользователи','Пользователи удаленного рабочего стола')
$all_PC = Get-ADComputer -Filter *
$all_PC | %{
$PC = $_
$PC_name = $PC.name
if (Test-Connection $PC_name -Count 1 -ErrorAction SilentlyContinue){
"*******************************************"
write-host $PC_name -BackgroundColor green
$PC_group_all | %{
$PC_group = $_
write-host "$PC_group" -BackgroundColor green
$ADSI_WinNT = [ADSI]"WinNT://$PC_name/$PC_group,group"
$ADSI_WinNT.Members() | foreach {
$member = $_.GetType().InvokeMember("AdsPath","GetProperty",$null,$_,$null).split("/")[-1]
$member
}
}
}
else{Write-Host "$PC_name : НЕ ОТВЕЧАЕТ" -BackgroundColor red }
}