2012-04-17 17 views

risposta

19

Il modo più semplice è utilizzare Directory attiva.

Poiché si utilizza il tag PowerShell e non PowerShell V2.0 è possibile utilizzare 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"] 
} 

È anche possibile utilizzare userPrincipalName anziché sAMAccountName nel filtro, per userPrincipalName è possibile utilizzare utente @ dominio modulo.


Utilizzando WMI: Se si vuole assolutamente farlo con WMI.

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

È possibile utilizzare la seconda soluzione localy sul server o da un computer all'interno del dominio, ma è un po 'più complicato per l'autenticazione a WMI dall'esterno del dominio.


Utilizzando PowerShell 2,0

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

Wow, che risposta completa! Grazie! La versione WMI funziona per me. Darò anche la versione 2.0 a provare. –

7

Ecco un altro modo possibile (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

Avevo bisogno solo delle ultime due righe in questa risposta perché funzionasse. –

0

Non WMI, ma questo può fare il lavoro altrettanto bene:

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