Я ищу сценарий PowerShell, который будет запрашивать и выводить всех локальных пользователей и пользователей AD, учетные записи служб и группы на заданных серверах Windows. Мне нужен сценарий для рекурсивного перечисления членов каждой группы, имеющей привилегии на этом сервере. Я ищу сценарий, который даст мне хорошую отправную точку, с которой я смогу адаптировать его к своим конкретным потребностям. Спасибо.
Мне было скучно во время обеденного перерыва, поэтому я сделала тебе это.
$strLocalMachine = $env:computername
$arrLocalGroups = Get-CimInstance -ClassName Win32_Group -filter "Domain = '$strLocalMachine'"
$arrDomainGroups = Get-CimInstance -ClassName Win32_Group -filter "Domain = '[YOUR DOMAIN NAME HERE]'"
ECHO ""
ECHO "Local Groups"
ECHO ""
foreach($objLocalGroup in $arrLocalGroups)
{
$groupname = $objLocalGroup.Name
$group = [ADSI]"WinNT://./$groupname"
ECHO "-----$($objLocalGroup.caption)-----"
@($group.Invoke("Members")) | foreach {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)}
}
ECHO ""
ECHO "Domain Groups"
ECHO ""
foreach($objDomainGroup in $arrDomainGroups)
{
$groupname = $objDomainGroup.name
$groupmembers = Get-QADGroupMember $groupname
ECHO "-----$groupname-----"
foreach($entry in $groupmembers)
{
IF($entry.type -eq 'group')
{
Echo "$($entry.name)`n GROUP MEMBERS"
$subgroupmembers = Get-QADGroupMember $($entry.name)
foreach($member in $subgroupmembers){ECHO " $($member.name)"}
}
else{echo "$($entry.name)"}
$entry = $null
}
}
Это имеет зависимость от бесплатные командлеты Quest AD для перечисления членства в доменных группах. Вы можете изменить его, сделав то же самое с командлетами Microsoft AD, если вы установили RSAT или запускаете его на контроллере домена.
Я не тестировал это на нескольких машинах, поэтому не могу обещать, насколько хорошо он будет работать за пределами моего тестового окна Win 7, но это должно быть нормально, если вы работаете как администратор домена.
Мне кажется, что вывод групп домена слишком велик для моего ПК-члена домена. Команда Get-CimInstance -ClassName Win32_Group -filter "Domain = '[YOUR DOMAIN NAME HERE]'"
вернул намного больше, чем я ожидал, так что YMMV, но если это правильные группы, тогда он должен пройти через список и дать вам корабли-члены.
Я не могу понять, как определить, являются ли члены локальных групп пользователем или группой, боюсь. Линия : @($group.Invoke("Members")) | foreach {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)}
должен позволить нам вызывать член, отличный от имени, но я не могу заставить его работать. Если кто-то может прояснить это для вас, вы сможете использовать это для составления списка членов местных групп.
надеюсь это поможет.