it-swarm.cn

命令行Active Directory查询用户名的电子邮件地址

在Windows上,在Active Directory环境中XP=-对我来说,最简单的方法是从命令行查询给定用户名的用户从AD查询用户的电子邮件地址。

(假设我知道它通常在树中的位置)。

(我了解网络用户 登录名 / domain,但我只想返回电子邮件地址元素。)

19
Hawkeye
dsquery user -name "user name"|dsget user -samid -email -display 
18
pQd

dsquery用户-name“名字的姓氏” | dsget用户-email

7
TheCleaner

如果您想要的电子邮件也是用户主体名称,则可以使用

whoami /upn

但是,这仅适用于获取当前用户的电子邮件,而不是最初假设该问题的任何用户的电子邮件。

6
krispy

这样的dsquery可能会起作用。

通过用户名dsquery.exe查询电子邮件* -filter“(&(objectClass = user)(!(objectClass = computer)(sAMAccountName = username)))” | dsget用户-email

我首先误读了该帖子,并认为您希望使用电子邮件名中的用户名。这就是为什么我发布了这个。 dsquery.exe * -filter“(&(objectClass = user)(!(objectClass = computer)([email protected])))” -attr用户名

基于工作中的一些脚本以及此站点还有其他一些想法 http://www.petri.co.il/forums/showthread.php?t=18464 有关使用csvde.exe

5
BrianP

adfind -sc u:“用户名”邮件

4
benPearce

安装Powershell和QuestAD附加组件包。然后是这样的:

connect-qadservice
(get-qaduser 'bobsusername').emailAddress
2
Neobyte

找到了这个线程,可以帮助我得到想要的东西。要将所有AD用户属性添加到环境变量中。该脚本从登录用户获取所有需要的属性,并设置相应的环境变量。我为变量添加了前缀,但这是可选的,因此变量名称变为“ AD [属性名称]”。您可以选择属性,只需在-attr之后添加或删除属性。但是对于多值属性不是很有用。最后(一个)值进入环境变量。

该脚本是当前cmd.exe的本地脚本

for /F "tokens=1,* delims=: " %%A in ('dsquery * domainroot -l -filter "(&(objectCategory=Person)(objectClass=User)(sAMAccountName=%USERNAME%))" -attr adminDescription employeetype company department physicalDeliveryOfficeName street title mail') do set AD%%A=%%B

要在Windows中获取全局环境变量,我们可以在Windows 7中使用“ setx”。(对于loginscript,也许……但要慢得多。)

for /F "tokens=1,* delims=: " %%A in ('dsquery * domainroot -l -filter "(&(objectCategory=Person)(objectClass=User)(sAMAccountName=%USERNAME%))" -attr adminDescription employeetype company department physicalDeliveryOfficeName street title mail') do set AD%%A=%%B& setx AD%%A "%%~B" > NUL

:EDIT:示例2中设置语句结尾的空格字符导致值以空白结尾。将其删除以更正。 (设置%% A = %% B&setx ...)还发现您必须导出至少两个属性,脚本才能正常工作。

回复晚了,但是如果可以帮助外面的人,我会很高兴。

2
Jörgen in Sweden

您可以编写简单的VBScript以通过LDAP查询创建具有VBS扩展名的文件

放入这样的东西

On Error Resume Next
Set objUser = GetObject _
  ("LDAP://CN=USER NAME,DC=DOMAIN_NAME,DC=com")

objUser.GetInfo

strMail = objUser.Get("mail")

WScript.echo "mail: " & strMail 

将正确的用户名放入LDAP查询字符串中,运行VBS文件并享受:)

如果您是第一次使用LDAP,那么编写LDAP查询可能会有些复杂。为了识别到用户的LDAP路径(即,您需要在LDAP://之后输入的内容),您可以下载- Active Directory Explorer 从Microsoft Run Explorer,导航到用户并查看其在“路径”文本框中显示的内容

在我的情况下,这类似于CN = [用户名],CN =用户,DC = [城市名称],DC = [公司名称],DC = com,

2
Bogdan_Ch

[〜#〜] linq [〜#〜]一切 !为了方便:

1)在LinqPad的查询属性中,添加对System.DirectoryServices.AccountManagement.dll的引用。 2)额外的命名空间导入:System.DirectoryServices.AccountManagement

using(PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "MyDomain))
  using(UserPrincipal usr = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, "MyUserID"))
        usr.Dump();
2
What Would Be Cool

我不知道它是否与线程启动器的意思相匹配。但是我只是找到了我现有问题的解决方案,在浏览该线程后已经解决了。 根据已知的邮件地址查找用户登录ID。 :)

C:\Users\MrCMD>for /f "delims=" %u in ('type salesforce-uid-mail-address.txt') do @dsquery.exe * -filter "(&(objectClass=user)(!(objectClass=computer)(mail=%u)))">>"salesforce-uid-cn.txt"
┌─────────────────────────────────────┐
│ Executed Wed 07/10/2013  8:29:55.05 │ As [MrCMD]
└─────────────────────────────────────┘
C:\Users\MrCMD>for /f "delims=" %u in ('type salesforce-uid-cn.txt') do @dsget.exe user %u -samid -l|find "samid" /i>>"salesforce-uid-samid.txt"
┌─────────────────────────────────────┐
│ Executed Wed 07/10/2013  8:31:56.40 │ As [MrCMD]
└─────────────────────────────────────┘

文件[salesforce-uid-mail-address.txt]包含电子邮件地址列表。文件[salesforce-uid-cn.txt]包含“带有路径的完整CN”。文件[salesforce-uid-samid.txt]包含“找到的SAMID”别名“用户登录名”。 那是所有人。 任何改进的想法都欢迎。 :)

1
Rhak Kahr