Windowsの場合XP Active Directory環境の場合-コマンドラインでユーザー名を指定してADからユーザーの電子メールアドレスを照会する最も簡単な方法は何ですか。
(私はそれが通常ツリーのどこに保管されているかを知っていると仮定します)。
(私はネットユーザーについて知っています ログイン名 / domainですが、メールアドレスの要素を戻したいだけです。)
dsquery user -name "user name"|dsget user -samid -email -display
dsquery user -name "Firstname Lastname" | dsget user -email
必要なメールがユーザープリンシパル名でもある場合は、
whoami /upn
ただし、これは現在のユーザーの電子メールを取得するためにのみ機能し、質問が当初想定していたユーザーとしては機能しません。
このdsqueryのようなものが機能する可能性があります。
ユーザー名でクエリメールdsquery.exe * -filter "(&(objectClass = user)(!(objectClass = computer)(sAMAccountName = username)))" | dsget user -email
私は最初に投稿を読み間違えたので、メール名からユーザー名が欲しいと思った。これが私がこれを投稿した理由です。 dsquery.exe * -filter "(&(objectClass = user)(!(objectClass = computer)([email protected])))" -attr username
作業中のいくつかのスクリプトと他のいくつかのアイデアがあるこのサイトに基づく http://www.petri.co.il/forums/showthread.php?t=18464 csvde.exeの使用について
adfind -sc u: "username"メール
PowershellとQuestADアドオンパックをインストールします。それは次のようなものです:
connect-qadservice
(get-qaduser 'bobsusername').emailAddress
欲しいものを手に入れるのに役立つこのスレッドを見つけました。 ADユーザー属性を環境変数に取得します。このスクリプトは、ログインしたユーザーから必要なすべての属性を取得し、対応する環境変数を設定します。変数にプレフィックスを付けましたが、これはオプションであるため、変数名は「AD [属性名]」になります。属性は自由に選択できます。-attrの後に属性を追加または削除してください。ただし、多値属性にはあまり役立ちません。最後の(1つの)値が環境変数に入ります。
このスクリプトは、現在の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 7で "setx"を使用して、Windowsでグローバル環境変数を取得できます(ログインスクリプトの場合...おそらくはるかに低速です)。
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のset-statementの終わりにある空白文字が原因で、値が空のスペースで終わりました。修正するために削除しました。 (Set %% A = %% B&setx ...)また、スクリプトが適切に機能するためには、少なくとも2つの属性をエクスポートする必要があることがわかりました。
遅い反応ですが、それがそこにいる誰かを助けることができれば私は幸せです。
単純な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エクスプローラー Microsoft Runエクスプローラーからユーザーに移動し、[パス]テキストボックスに表示される内容を確認します
私の場合、それはCN = [user name]、CN = Users、DC = [city_name]、DC = [company_name]、DC = com、
[〜#〜] linq [〜#〜] to everything !便宜上:
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();
スレッドスターターの平均と一致しているかどうかはわかりません。しかし、私はこのスレッドを閲覧した後ですでに解決されている私の既存の問題の解決策を見つけました。 既知のメールアドレスに基づくユーザーログイン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]には、「found SAMID」エイリアス「ユーザーログイン名」が含まれています。 それはすべての人々です。 改善のためのアイデアは大歓迎です。 :)