跟进我的最后一个问题,一旦我有了正确的域控制器,我想获取给定用户的 Exchange 服务器。我可以使用 ldapsearch 做到这一点:
ldapsearch -LLL -h dc.example.com -D [email protected] -W -b "DC=example,DC=com"-s sub -x '(sAMAccountName=someuser)' msExchHomeServerName homeMTA homeMDB
dn: CN=someuser,OU=Employees,OU=Users,DC=example,DC=com
homeMTA: CN=Microsoft MTA,CN=EXCHANGESERVER,CN=Servers,CN=First Administrative Gr
oup,CN=Administrative Groups,CN=My Company,CN=Microsoft Exchange,CN=Servic
es,CN=Configuration,DC=example,DC=com
homeMDB: CN=Database 1,CN=Storage Group 1,CN=InformationStore,CN=EXCHANGESERVER,C
N=Servers,CN=First Administrative Group,CN=Administrative Groups,CN=My Company,
CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=example,DC=com
msExchHomeServerName: /o=My Company/ou=First Administrative Group/cn=Config
uration/cn=Servers/cn=EXCHANGESERVER
我想将上述 DN(两种完全不同的格式)转换为 DNS 名称。在本例中,它们都应转换为 exchangeserver.example.com。
另外,有没有更简单的方法来获取这些信息?在我最常见的情况下,进行查询的用户就是我们感兴趣的用户,所以我的理想是 unix 用户可以询问“我的 exchange 服务器的 FQDN 是什么?”,而无需将 unix 计算机加入 AD 域。
编辑:我以为我找到了解决方案,但它实际上并没有起作用:
ldapsearch -x -LLL -h dc.cisco.com -D [email protected] -W -s base -b "CN=Microsoft MTA,CN=EXCHANGESERVER,CN=Servers,CN=First Administrative Group,CN=Administrative Groups,CN=My Company,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=example,DC=com" dnsHostName
这非常接近,但是您必须知道从 -b 属性的前面去掉“CN=Microsoft MTA”,这不利于编程工作。
答案1
假设你能读懂 VBScript,这里有一个链接来自 Microsoft 的脚本,展示如何查找邮箱的位置获取用户帐户。
该脚本查询用户的“homeMDB”属性(以获取保存用户邮箱的邮箱数据库的 DN)。然后,他们查询该 MDB 以查找“拥有”该 MDB 的服务器对象的 DN,使用 MDB 的“msExchOwningServer”属性值(顺便说一句,您可以忽略有关存储组的位,因为您不关心它)。
假设您需要一个 DNS 名称,请查询服务器对象的“networkAddress”属性(通过查询用户的“homeMDB”的 DN 返回的 MDB 对象的“msExchOwningServer”属性中命名的属性),然后获取以“nacn_ip_tcp”开头的值。这将为您提供托管该 MDB 的服务器的 FQDN。
编辑:
我并不是说您需要执行 VBScript——只是说它会告诉您使用 ldapsearch 查询什么。同样,当我说“服务器对象”时,我并不是说您会实例化某种 VBScript 对象——只是说您会查询服务器命名的 DN。
因此,假设我想要托管用户 Bob 邮箱的服务器的 DNS 名称,我会使用域根目录(或全局目录的根目录,如果我想搜索林中的所有域)中的 LDAP 搜索过滤器“(sAMAccountName=Bob)”查询 Bob 的“homeMDB”属性。
ldapsearch -h ad.example.com -D [email protected] -W -b "DC=ad,DC=example,DC=com" -s sub -x "(sAMAccountName=Bob)" homeMDB
这将返回 homeMDB 属性:
homeMDB: CN=Mailbox Store (EXCH-SRV),CN=First Storage Group,CN=InformationStore,CN=EXCH-SRV,CN=Servers,CN=EXAMPLE,CN=Administrative Groups,CN=Example Organization,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=ad,DC=example,DC=com
然后,使用该 homeMDB 属性作为基本 DN,查询“msExchOwningServer”:
ldapsearch -h ad.example.com -D [email protected] -W -b "CN=Mailbox Store (EXCH-SRV),CN=First Storage Group,CN=InformationStore,CN=EXCH-SRV,CN=Servers,CN=EXAMPLE,CN=Administrative Groups,CN=Example Organization,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=ad,DC=example,DC=com" msExchOwningServer
这将返回托管该邮箱数据库的服务器的 DN:
msExchOwningServer: CN=EXCH-SRV,CN=Servers,CN=EXAMPLE,CN=Administrative Groups,CN=Example Organization,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=ad,DC=example,DC=com
最后,使用服务器的 DN 作为基准 DN,查询“networkAddress”属性:
ldapsearch -h ad.example.com -D [email protected] -W -b "CN=EXCH-SRV,CN=Servers,CN=EXAMPLE,CN=Administrative Groups,CN=Example Organization,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=ad,DC=example,DC=com" networkAddress
这将返回所有网络地址,其中您感兴趣的是以“nacn_ip_tcp”开头的地址。
networkAddress: ncacn_vns_spp:EXCH-SRV
networkAddress: netbios:EXCH-SRV
networkAddress: ncacn_np:EXCH-SRV
networkAddress: ncacn_spx:EXCH-SRV
networkAddress: ncacn_ip_tcp:EXCH-SRV.ad.example.com
networkAddress: ncalrpc:EXCH-SRV
您可以对“homeMTA”属性执行相同的操作,但是在查询“homeMTA”属性中命名的 DN 时,您将搜索“msExchResponsibleMTAServerBL”而不是“msExchOwningServer”。
最后,如果您想放弃所有这些,请向用户查询“msExchHomeServerName”属性。
msExchHomeServerName: /o=Example Organization/ou=EXAMPLE/cn=Configuration/cn=Servers/cn=EXCH-SRV
获取返回的值并将其用作“legacyExchangeDN”属性的搜索过滤器,并在目录中与 Exchange 相关的子树中搜索“networkAddress”属性。
ldapsearch -h ad.example.com -D [email protected] -W -b "CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=ad,dc=example,dc=com" -x "(legacyExchangeDN=/o=Example Organization/ou=EXAMPLE/cn=Configuration/cn=Servers/cn=EXCH-SRV)" networkAddress
您将获得与上述相同的网络地址。