Вы можете сделать это таким образом, если вам действительно нужно (и я могу помочь вам сделать это таким образом, если вам действительно нужно), но если вы собираетесь запускать этот сценарий с учетными данными интересующего вас пользователя,тогда вы можете получить все группы из логина пользователя.Он уже содержит рекурсивный список всех групп безопасности, в которых находится пользователь. (Он не будет включать группы, в которых «Тип группы» равен «Распространение»)
Маркер входа содержит список идентификаторов безопасности, поэтомусамый быстрый способ - сравнить с использованием SID интересующей вас группы, поскольку он вообще не должен делать никаких сетевых запросов.Это особенно удобно для пользователей ноутбуков, которые могут не подключаться к сети при входе в систему - ваш скрипт все равно будет работать.
$currentIdentity = [Security.Principal.WindowsIdentity]::GetCurrent()
if ($currentIdentity.Groups.Where({$_.Value -eq "S-1-1-0"}, "First")) { #Is in "Everyone"?
"Yes"
} else {
"No"
}
Чтобы найти SID группы, используйте следующую команду:
(Get-ADGroup "GroupName").SID.Value
Затем скопируйте / вставьте это значение в сценарий.
Если вы предпочитаете использовать имя группы в сценарии, вы можете преобразовать его в WindowsPrincipal
и использовать IsInRole
.Однако для этого потребуется выполнить сетевой запрос на поиск группы по ее имени.
$currentIdentity = [Security.Principal.WindowsIdentity]::GetCurrent()
$currentPrincipal = New-Object System.Security.Principal.WindowsPrincipal($currentIdentity)
if ($currentPrincipal.IsInRole("Everyone")) {
"Yes"
} else {
"No"
}