我们 Windows 网络上的大多数应用程序都通过电子邮件地址识别用户(例如 Outlook、Lync、Windows 安全对话框等)。但是,某些工具(例如 SQL Server Reporting Services)在指定用户时仅接受 DOMAIN\login 格式。
如何根据用户的电子邮件地址查找用户的域名\登录名?
答案1
让我们在这里澄清一些误解。您域中的用户用来验证您提到的示例(Outlook、Lync、Windows 安全对话框)的用户名不是实际上是电子邮件地址。它可能看起来像电子邮件地址,并且在特定域中,它甚至可能与用户的电子邮件地址相同。但正如@Zordache 在其评论中指出的那样,它实际上是用户主体名称(UPN)。默认情况下,它往往是用户SAM 帐户名称属性和域的 FQDN 以“@”字符分隔:<sAMAccountName>@<domain FQDN>
。但从技术上讲,它可以是任何东西,只要它在林中以及与其交互的任何其他林中都是唯一的(感谢 HopelessN00b 的澄清)。
您正在寻找的用户名形式是指定 AD 用户名的传统方式,该用户名使用域的 NetBIOS 名称(短名称)和由“\”字符分隔的 SAM-Account-Name 值:<domain short name>\<sAMAccountName>
。
@MTS,@HopelessN00b 的评估是正确的,您的答案在技术上并不正确,即使它适用于您的特定环境。至少,DSQUERY 命令中的过滤器参数应该代替userPrincipalName
属性mail
。但请允许我建议一种基于 PowerShell 的替代方案,该方案使用内置的 ActiveDirectory 模块(假设您已启用该功能)。
import-module ActiveDirectory
$domain = (get-addomain).NetBIOSName
$samaccountname = (get-aduser -ldapfilter "([email protected])").sAMAccountName
$legacyUsername = "$domain\@samaccountname"
答案2
这是我自己能想到的办法,但似乎应该有更简单的方法。
下载并安装 DSQUERY(及相关实用程序)。
请参阅在哪里可以获得 dsquery 和其他有助于调试 Active Directory 问题的工具?从命令行:
DSQUERY * domainroot -filter "(&(objectCategory=Person)(objectClass=User)(mail=%1))”-attr sAMAccountName
(代替%1使用您正在搜索的电子邮件地址。)