【问题标题】:macOS opendirectory : extract all domains from active directory ODNode objectmacOS opendirectory:从活动目录 ODNode 对象中提取所有域
【发布时间】:2020-07-17 18:58:16
【问题描述】:

我想获取绑定到我的活动目录服务器的所有可用网络域。

从命令行我使用odutil show nodenames 检索:

Name                                          State  Refs Type         External Locked Hidden
--------------------------------------------- ------ ---- ------------ -------- ------ ------
/Active Directory                             Online 3                          X      X
/Active Directory/TEST                               10   
/Active Directory/TEST/All Domains            Online 4    Virtual node
/Active Directory/TEST/Global Catalog         Online 6    Virtual node                 X
/Active Directory/TEST/domain.com             Online 6    Virtual node                 X
/Configure                                    Online 2                          X      X
/Contacts                                     Online 3
/LDAPv3                                       Online 1                          X      X
/Local                                        Online 2                          X      X
/Local/Default                                Online 36                         X
/Search                                       Online 19

我只关心基于 Active Directory 的节点,因为我只想列出连接到这些节点的所有域。

在上面的例子中,/Active Directory/myserver/Global Catalog/Active Directory/myserver/domain.com 都被隐藏了。

不幸的是,我找不到从命令行输出中获取标记为隐藏节点的方法。也许有人知道怎么做?

我迭代这些节点的代码是:

    ODNode * node = [ODNode nodeWithSession:[ODSession defaultSession] 
                                       type:kODNodeTypeAuthentication error:nil];
    NSArray * subnodes = (__bridge NSArray *)ODNodeCopySubnodeNames((__bridge ODNodeRef)node, NULL);

仅检索非隐藏节点:/Active Directory/myserver/All Domains

编辑:

在 windows 中有一个专门的命令提取本地计算机的域:

GetComputerNameExW(ComputerNameDnsDomain, domainName, &dwSize))

我希望找到 macOS 的替代方案。

【问题讨论】:

    标签: objective-c macos active-directory


    【解决方案1】:

    也许它对任何人都有帮助,我找到了一种方法来提取连接域而不依赖于分配的用户,只需迭代子节点,识别引用远程活动目录服务的子节点,然后从节点的详情:

        NSError *err;
        ODNode * node = [ODNode nodeWithSession:[ODSession defaultSession] 
                                           type:kODNodeTypeAuthentication error:&err];
    
        if (err) {
            NSLog(@"couldn't fetch parent node, reason = @%", [err description]);
            return;
        }
    
        NSArray * subnodeNames = [node subnodeNamesAndReturnError:&err];
        if (err) {
           NSLog(@"couldn't fetach subnodeNames. reason = %s", [err description]);
            return;
        }
    
        
        for (NSString * subnodeName in subnodeNames) {
            ODNode * subnodeObject = [ODNode nodeWithSession:[ODSession defaultSession]
                                                        name:subnodeName
                                                       error:&err];
            if (err) {
               NSLog(@"couldn't fetch ODNode for @%. reason: @%",
                         subnodeName, [err description]);
                continue;
            }
            
            id subnodeDetails = [subnodeObject nodeDetailsForKeys:nil error:&err];
            if (err) {
               NSLog(@"couldn't fetch ODNode details for %@. reason: %@",
                         subnodeName, [err description]);
                continue;
            }
    
            NSArray * domainName = subnodeDetails[@"dsAttrTypeNative:DomainName"];
            if (domainName) {
                NSLog(@"found default domain = %@", [domainName lastObject]);
                return;
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-10
      • 1970-01-01
      • 1970-01-01
      • 2013-10-18
      • 2018-11-06
      • 1970-01-01
      相关资源
      最近更新 更多