检索当前域用户的全名

使用PowerShell,我怎样才能得到当前login的域用户的全名(不仅仅是它的用户名),而不需要ActiveDirectory模块?

$dom = $env:userdomain $usr = $env:username ([adsi]"WinNT://$dom/$usr,user").fullname 

返回:

 John Doe 

其他一些(大部分)晦涩的属性也可用。 一些有用的:

  • Homedrive UNC
  • Homedrive信
  • 描述
  • login脚本

尝试:

 [adsi]"WinNT://$dom/$usr,user" | select * 

我喜欢被接受的答案,但仅仅是因为我想亲自尝试一下:

 $user = whoami Get-WMIObject Win32_UserAccount | where caption -eq $user | select FullName 

收益:

 FullName -------- TheCleaner 

或者如果您希望没有标题信息和结果:

 $user = whoami Get-WMIObject Win32_UserAccount | where caption -eq $user | select FullName | ft -hide 

一个class轮使用Powershell 3.0:

 gwmi win32_useraccount | where {$_.caption -match $env:USERNAME} | select fullname | ft -HideTableHeaders 

根据您对Craig620接受的答案的评论,

我是否需要域pipe理员权限才能运行此命令? 或者域用户本身可以运行这个命令?

这听起来像你试图避免在用户工作站上安装PowerShell模块,是的,但是,不,你不需要成为一个域pipe理员在AD中查找自己的名字。 您可以在Outlook中查看GAL中出现的任何信息,包括全名,作为标准用户。

您也可以在AD中使用Get-WmiObject Win32_userAccount查找其他人的全名,如果您想避开AD模块。 查询AD的服务帐户(以及pipe理服务帐户之前)通常是标准的非特权AD用户。

使用-match不是一个好的select,因为“ed”的$ env:USERNAME将匹配“fred”和“edith”。 而是使用-eq进行完全匹配,并在需要时添加到域中。 我使用foreach循环来结束所有前导空白,作为“select fullname | ft -HideTableHeaders”的替代scheme,它可以打印前导和尾随的换行符。

 gwmi win32_useraccount | where {$_.caption -eq $("domain\" + $env:USERNAME)} | foreach {$_.fullname} 

如果你总是有.Net 3.5或更高版本(你应该使用PowerShell v4.0和更高版本):

 Add-Type -AssemblyName System.DirectoryServices.AccountManagement; $DisplayName = [System.DirectoryServices.AccountManagement.UserPrincipal]::Current.DisplayName; 

该类提供了对所有常见LDAP属性的非常简单的访问,因此,如果您需要一些扩展的属性,那么您不需要查找两次(一次使用WinNT,再次使用LDAP)或使用[ADSISearcher]执行LDAPsearch不实施。

如果您不想使用Active Directory模块,则不能; 除非您希望更深入,并对域控制器执行实际的LDAP查询。

除了用户名以外的任何用户信息都存储在Active Directory中,并且必须在那里检索。