Получение состава локальных групп удаленного ПК
В нашей компании принято доступ на удаленный рабочий стол навешивать только на 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 } }