使用PowerShell,我怎样才能得到当前login的域用户的全名(不仅仅是它的用户名),而不需要ActiveDirectory模块?
$dom = $env:userdomain $usr = $env:username ([adsi]"WinNT://$dom/$usr,user").fullname
返回:
John Doe
其他一些(大部分)晦涩的属性也可用。 一些有用的:
尝试:
[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中,并且必须在那里检索。