2012-04-17 15 views

Trả lời

19

Cách đơn giản nhất là sử dụngHoạt động-Thư mục.

Vì bạn đang sử dụng thẻ PowerShell chứ không phải PowerShell V2.0, bạn có thể sử dụng 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"] 
} 

Bạn cũng có thể sử dụng userPrincipalName thay vì sAMAccountName trong bộ lọc, cho userPrincipalName bạn có thể sử dụng user @ miền mẫu.


Sử dụng WMI: Nếu bạn absolutly muốn làm điều đó với WMI.

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

Bạn có thể sử dụng giải pháp thứ hai nằm trên máy chủ của bạn hoặc từ máy tính bên trong miền, nhưng hơi phức tạp hơn để xác thực với WMI từ bên ngoài miền.


Sử dụng PowerShell 2,0

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

Wow, câu trả lời hoàn chỉnh là gì! Cảm ơn! Phiên bản WMI hoạt động cho tôi. Tôi cũng sẽ thử phiên bản 2.0. –

7

Dưới đây là một cách khác để có thể (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

Tôi chỉ cần hai dòng cuối cùng trong câu trả lời này để nó hoạt động. –

0

Không WMI, nhưng điều này có thể thực hiện công việc chỉ là tốt:

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