Все перечисленные ниже методы перечисляют все группы, включая вложенные группы.
В приведенном ниже примере команда gpresult
будет выполняться в контексте пользователя.gpresult
выводит в файл XML в локальном профиле пользователя, к которому он уже должен иметь полный доступ.Затем XML-файл читается и проходит через каждый узел, пока не дойдет до узла, содержащего группы.Список групп содержит локальные и доменные группы и выводится непосредственно на консоль.Это может быть легко сохранено в переменной или выведено в файл.Если вам нужны только доменные группы, это можно легко отфильтровать отсюда с помощью регулярного выражения.Требуется, чтобы на клиентских компьютерах работала хотя бы Windows Vista SP1 или более поздняя версия.
gpresult /USER "$env:userdomain\$env:username" /X "$env:userprofile\rsop.xml"
$xml = [xml](Get-Content "$env:userprofile\rsop.xml")
$xml.Rsop.UserResults.SecurityGroup.Name."#text" # Displays the groups
Remove-Item "$env:userprofile\rsop.xml" # Removes the XML file
Вы также можете использовать Regex, чтобы найти список групп:
$out = gpresult /R /USER $env:username
$GroupsUnfiltered = (($out | out-string) -split "-{10,}")[-1]
$Groups = ($GroupsUnfiltered.trim() -replace "(?m)^\s+","") -split "(?m)\r?\n"
$Groups
Следующее также может работать, если список вашей группы всегда начинается с предсказуемой группы, такой как Domain Users в этом примере:
$out = gpresult /R /USER $env:username
$GroupList = $out.where({$_ -match "domain users"},'SkipUntil').trim()
$GroupList
Этот код предполагает, что пользователи и машины присоединены к одному домену или, по крайней мере, присоединены кдоверенные домены.Во втором фрагменте кода предполагается, что каждый пользователь входит в группу «Пользователи домена», а машины изначально являются PowerShell v4 или более поздней версии.