2012-04-17 17 views
11

मेरे पास उपयोगकर्ता का नेटवर्क लॉगिन नाम है। PowerShell और WMI से उस उपयोगकर्ता के लिए एक वैध ईमेल प्राप्त करना संभव है? ध्यान दें कि लॉगिन नाम ईमेल में नाम से अलग है, इसलिए मैं केवल लॉगिन डोमेन को ईमेल डोमेन से जोड़ नहीं सकता हूं।उपयोगकर्ता नाम से PowerShell और WMI के माध्यम से उपयोगकर्ता का ईमेल पता प्राप्त करें?

उत्तर

19

एक्टिव-डायरेक्टरी का उपयोग करने का सबसे आसान तरीका है।

जैसा कि आप पावरशेल टैग का उपयोग कर रहे हैं और PowerShell V2.0 नहीं, आप ADSI का उपयोग कर सकते हैं।

Clear-Host 
$dn = New-Object System.DirectoryServices.DirectoryEntry ("LDAP://WM2008R2ENT:389/dc=dom,dc=fr","[email protected]","Pwd") 

# Look for a user 
$user2Find = "user1" 
$Rech = new-object System.DirectoryServices.DirectorySearcher($dn) 
$rc = $Rech.filter = "((sAMAccountName=$user2Find))" 
$rc = $Rech.SearchScope = "subtree" 
$rc = $Rech.PropertiesToLoad.Add("mail"); 

$theUser = $Rech.FindOne() 
if ($theUser -ne $null) 
{ 
    Write-Host $theUser.Properties["mail"] 
} 

तुम भी फिल्टर में userPrincipalName बजाय sAMAccountName उपयोग कर सकते हैं, userPrincipalName के लिए आप उपयोगकर्ता @ डोमेन फार्म का उपयोग कर सकते हैं।


WMI का उपयोग: आप absolutly WMI के साथ यह करने के लिए चाहते हैं।

$user2Find = "user1" 
$query = "SELECT * FROM ds_user where ds_sAMAccountName='$user2find'" 
$user = Get-WmiObject -Query $query -Namespace "root\Directory\LDAP" 
$user.DS_mail 

आप अपने सर्वर पर या डोमेन के अंदर एक कंप्यूटर से localy दूसरा समाधान का उपयोग कर सकते हैं, लेकिन यह डोमेन के बाहर से WMI को प्रमाणित करने में थोड़ा और अधिक जटिल है।


PowerShell 2.0 का उपयोग

Import-Module activedirectory 
$user2Find = "user1" 
$user = Get-ADUser $user2Find -Properties mail 
$user.mail 
+0

वाह, क्या एक पूरा जवाब है! धन्यवाद! डब्ल्यूएमआई संस्करण मेरे लिए काम करता है। मैं 2.0 संस्करण भी कोशिश करूंगा। –

7

यहाँ एक और संभव तरीके (original source) है:

PS> [adsisearcher].FullName 
System.DirectoryServices.DirectorySearcher 

PS> $searcher = [adsisearcher]"(objectClass=user)" 
PS> $searcher 

CacheResults    : True 
ClientTimeout   : -00:00:01 
PropertyNamesOnly  : False 
Filter     : (objectClass=user) 
PageSize     : 0 
PropertiesToLoad   : {} 
ReferralChasing   : External 
SearchScope    : Subtree 
ServerPageTimeLimit  : -00:00:01 
ServerTimeLimit   : -00:00:01 
SizeLimit    : 0 
SearchRoot    : 
Sort      : System.DirectoryServices.SortOption 
Asynchronous    : False 
Tombstone    : False 
AttributeScopeQuery  : 
DerefAlias    : Never 
SecurityMasks   : None 
ExtendedDN    : None 
DirectorySynchronization : 
VirtualListView   : 
Site      : 
Container    : 

PS> $searcher = [adsisearcher]"(samaccountname=$env:USERNAME)" 
PS> $searcher.FindOne().Properties.mail 
+2

मुझे काम करने के लिए इस जवाब में केवल दो अंतिम पंक्तियों की आवश्यकता थी। –

0

नहीं WMI है, लेकिन यह काम बस के रूप में अच्छी तरह से कर सकते हैं:

PS> ([adsi]"WinNT://$env:USERDOMAIN/$env:USERNAME,user").Properties["mail"] 
संबंधित मुद्दे

 संबंधित मुद्दे