Когда WinNT: // провайдер запрашивает Active Directory? Или как получить SID члена локальной группы, если это учетная запись домена - PullRequest
0 голосов
/ 16 мая 2019

Хорошо, поэтому я использую поставщика WinNT с классом DirectoryEntry для перечисления членов локальной группы через свойство Members .

Если участник является локальной учетной записью,DirectoryEntry также будет считываться из SAM на локальном компьютере, предположительно.

Однако, если участник является учетной записью домена, будет ли поставщик выполнять запрос к Active Directory, когда я получаю доступ к свойствам объекта DirectoryEntry?

Есть ли способ разграничить два сценария?Например, проверьте свойство в DirectoryEntry, чтобы узнать, будет ли оно получать свойства от SAM локального компьютера или запросить контроллер домена для чтения Active Directory?

Есть ли способ получить имя (или даже просто SID) члена без запросов к Active Directory?

Я пытаюсь перечислить локальные группы на большом количестве серверов и не хочу, чтобы их набираликонтроллер домена, если они содержат много учетных записей пользователей домена.

1 Ответ

1 голос
/ 16 мая 2019

Вы можете запросить Win32_GroupUser, и это не должно ударить AD вообще.Затем вам просто нужно немного разобрать строку, чтобы получить имя пользователя, тип пользователя (пользователь / группа) и источник (локальный / домен).

$Servers = 'Server1.domain.com','Server2.domain.com'
$GMembers = ForEach($Server in $Servers){
    $BaseName=$Server.split('.')[0]
    Get-WmiObject -ComputerName $Server -Query "SELECT * FROM win32_GroupUser WHERE GroupComponent = ""Win32_Group.Domain='$BaseName',Name='Administrators'"""
}
$GMembers | 
    ?{$_.PartComponent -match '\\\\(.+?)\\.+?Win32_(.+?)\.Domain="(.+?)",Name="(.+?)"'}|
    %{
        [PSCustomObject]@{
            Server=$Matches[1]
            Domain=$Matches[3]
            Account=$Matches[4]
            AccountType=$Matches[2]
        }
    }
...