Ich habe den Netzwerk-Login-Namen eines Benutzers. Von PowerShell und WMI ist es möglich, eine gültige E-Mail für diesen Benutzer zu erhalten? Beachten Sie, dass sich der Anmeldename von dem Namen in der E-Mail unterscheidet, sodass ich den Anmeldenamen nicht einfach mit der E-Mail-Domäne kombinieren kann.Erhalten Sie die E-Mail-Adresse eines Benutzers aus dem Benutzernamen über PowerShell und WMI?
Antwort
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
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
Ich brauchte nur die zwei letzten Zeilen in dieser Antwort, damit es funktioniert. –
Nicht WMI, aber genauso gut die Arbeit erledigen kann:
PS> ([adsi]"WinNT://$env:USERDOMAIN/$env:USERNAME,user").Properties["mail"]
Wow, was für eine komplette Antwort! Vielen Dank! Die WMI-Version funktioniert für mich. Ich werde auch die 2.0-Version ausprobieren. –