webentwicklung-frage-antwort-db.com.de

Erhalten Sie die E-Mail-Adresse eines Benutzers aus dem Benutzernamen über PowerShell und WMI.

Ich habe den Netzwerk-Anmeldenamen eines Benutzers. Kann man von PowerShell und WMI eine gültige E-Mail für diesen Benutzer erhalten? Beachten Sie, dass sich der Anmeldename von dem Namen in der E-Mail unterscheidet. Daher kann ich den Anmeldenamen nicht einfach mit der E-Mail-Domäne kombinieren.

11
Michael Kelley

Der einfachste Weg ist, Active-Directory zu verwenden.

Da Sie das 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 verwenden. Für userPrincipalName können Sie das Formular user @ domain verwenden.


Mit WMI : Wenn Sie es unbedingt mit WMI machen wollen.

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

Sie können die zweite Lösung lokal auf Ihrem Server oder von einem Computer in der Domäne verwenden. Die Authentifizierung bei WMI außerhalb der Domäne ist jedoch etwas komplizierter.


Verwenden von PowerShell 2.0

Import-Module activedirectory
$user2Find = "user1"
$user = Get-ADUser $user2Find -Properties mail
$user.mail
22
JPBlanc

Hier ist ein anderer möglicher Weg ( Originalquelle ):

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
9
Michael Kelley

Nicht WMI, aber das kann die Arbeit genauso gut machen:

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