2012-04-17 6 views

Antwort

19

Der einfachste Weg ist die Verwendung von Active-Directory.

Da Sie PowerShell-Tag und nicht PowerShell V2.0 verwenden, können Sie ADSI verwenden.

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"] 
} 

Sie können auch userPrincipalName anstelle von sAMAccountName im Filter für userPrincipalName können Sie user @ domain Formular.


Mit WMI: Wenn Sie absolutly es mit WMI tun wollen.

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

können Sie die zweite Lösung verwenden localy auf Ihrem Server oder von einem Computer innerhalb der Domäne, aber es ist ein wenig komplizierter aus Ländern außerhalb der Domäne zu WMI zu authentifizieren.


Mit Powershell 2,0

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

Wow, was für eine komplette Antwort! Vielen Dank! Die WMI-Version funktioniert für mich. Ich werde auch die 2.0-Version ausprobieren. –

7

Hier ist eine andere Art und Weise (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

Ich brauchte nur die zwei letzten Zeilen in dieser Antwort, damit es funktioniert. –

0

Nicht WMI, aber genauso gut die Arbeit erledigen kann:

PS> ([adsi]"WinNT://$env:USERDOMAIN/$env:USERNAME,user").Properties["mail"] 
Verwandte Themen