Tôi có tên đăng nhập mạng của người dùng. Từ PowerShell và WMI, bạn có thể nhận được email hợp lệ cho người dùng đó không? Lưu ý rằng tên đăng nhập khác với tên trong email, vì vậy tôi không thể kết hợp tên đăng nhập với tên miền email.Nhận địa chỉ email của người dùng từ tên người dùng qua PowerShell và WMI?
Trả lời
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
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
Tôi chỉ cần hai dòng cuối cùng trong câu trả lời này để nó hoạt động. –
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"]
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. –