11

ユーザーのネットワーク ログイン名があります。PowerShell と WMI から、そのユーザーの有効な電子メールを取得できますか? ログイン名は電子メールの名前とは異なることに注意してください。そのため、ログイン名と電子メール ドメインを組み合わせることはできません。

4

3 に答える 3

24

最も簡単な方法は、Active-Directory を使用することです。

PowerShell V2.0 ではなく PowerShell タグを使用しているため、ADSI を使用できます。

Clear-Host
$dn = New-Object System.DirectoryServices.DirectoryEntry ("LDAP://WM2008R2ENT:389/dc=dom,dc=fr","jpb@dom.fr","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"]
}

user@domainフォームを使用できるため、フィルターのuserPrincipalName代わりに使用することもできます。sAMAccountNameuserPrincipalName


WMI の使用: 絶対に WMI を使用したい場合。

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

サーバー上またはドメイン内のコンピューターから 2 番目のソリューション ローカルを使用できますが、ドメイン外から WMI への認証を行うのは少し複雑です。


PowerShell 2.0 の使用

Import-Module activedirectory
$user2Find = "user1"
$user = Get-ADUser $user2Find -Properties mail
$user.mail
于 2012-04-17T03:24:50.507 に答える
12

別の可能な方法(元のソース)は次のとおりです。

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
于 2012-11-14T21:12:52.580 に答える
0

WMI ではありませんが、これでも同じように機能する可能性があります。

PS> ([adsi]"WinNT://$env:USERDOMAIN/$env:USERNAME,user").Properties["mail"]
于 2015-06-14T14:18:32.833 に答える