Запрос групп Active Directory с дополнительными свойствами - PullRequest
0 голосов
/ 09 октября 2018

Я могу запросить мои группы Active Directory с помощью следующего:

open System.DirectoryServices.AccountManagement

let specialGroups () =
    let ctx = new PrincipalContext(
                contextType = ContextType.Domain, 
                name = "domain.net", 
                container = "DC=domain,DC=net")
    let allGroups = new GroupPrincipal(ctx, "*")
    let srch = new PrincipalSearcher(allGroups)
    [| for group in srch.FindAll() -> group |]

Как добавить некоторые свойства, такие как Mail, как это делает PowerShell?

Get-ADGroup "GROUPNAME.UG" -Properties Mail

1 Ответ

0 голосов
/ 09 октября 2018

Вы можете получить свойства, получив базовый объект DirectoryEntry, а затем получив доступ к его коллекции Properties.Вот пример определения функции getProperty для объекта Principal с последующим ее использованием для фильтрации по свойству "Mail":

open System.DirectoryServices
open System.DirectoryServices.AccountManagement

    let getProperty name (group: Principal) =
    let entry = group.GetUnderlyingObject() |> unbox<DirectoryEntry>
    [| for value in entry.Properties.[name] -> value |> string |]

let specialGroups () =
    let ctx = new PrincipalContext(
                contextType = ContextType.Domain, 
                name = "domain.net", 
                container = "DC=domain,DC=net")
    let allGroups = new GroupPrincipal(ctx, "*")
    let srch = new PrincipalSearcher(allGroups)
    [| for group in srch.FindAll() |> Seq.filter (getProperty "Mail" >> Array.isEmpty) -> group |]
...