Recuperar el nombre completo del usuario del dominio actual

23

Con PowerShell, ¿cómo puedo obtener el nombre completo del usuario del dominio actualmente conectado (no solo su nombre de usuario) sin la necesidad del módulo ActiveDirectory?

Jonathan Rioux
fuente

Respuestas:

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

Devoluciones:

John Doe

Algunas otras propiedades (en su mayoría) oscuras también están disponibles. Algunos útiles:

  • Homedrive UNC
  • Carta de Homedrive
  • Descripción
  • Script de inicio de sesión

Tratar:

[adsi]"WinNT://$dom/$usr,user" | select *
Clayton
fuente
3
Buena respuesta. Por supuesto, esto está consultando AD ... :)
Massimo
1
¿Necesito derechos de administrador de dominio para ejecutar este comando? ¿O el usuario del dominio puede ejecutar este comando?
Jonathan Rioux
1
Cualquier usuario de dominio puede consultar AD para este tipo de información.
Massimo
1
@Massimo Ningún usuario de dominio puede consultar AD para este tipo de información. A los usuarios no se les puede otorgar (o negar) el permiso "Leer restricciones de cuenta", y no pueden consultar ningún dato de Active Directory
Ian Boyd
15

Me gusta la respuesta aceptada, pero solo porque quería probar esto yo mismo:

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

devoluciones:

FullName
--------
TheCleaner

o si desea no tener la información del encabezado y solo el resultado:

$user = whoami
Get-WMIObject Win32_UserAccount | where caption -eq $user | select FullName | ft -hide
El limpiador
fuente
He leído este demasiado rápido, se hace la consulta AD. Retracto verbalmente mi voto.
MDMoore313
2
Pero no requiere los módulos AD PS
squillman
3
@squillman no lo hace, solo le da a Cleaner un momento difícil.
MDMoore313
Gotcha Lo siento, debe haber sido descafeinado ...
Squillman
7

Un revestimiento usando Powershell 3.0:

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

Según su comentario sobre la respuesta aceptada de Craig620,

¿Necesito derechos de administrador de dominio para ejecutar este comando? ¿O el usuario del dominio puede ejecutar este comando?

Parece que está tratando de evitar instalar módulos de PowerShell en estaciones de trabajo de usuario, sí, pero también, no, no necesita ser un administrador de dominio para buscar su propio nombre en AD. Puede buscar casi cualquier información que aparezca en la GAL en Outlook, incluido el nombre completo, como usuario estándar.

También puede buscar los nombres completos de otras personas como usuario estándar en AD (usando Get-WmiObject Win32_userAccount, si desea evitar los módulos AD). Las cuentas de servicio que consultan AD (bueno, antes de las cuentas de servicio administradas ) generalmente son usuarios estándar de AD sin privilegios.

Katherine Villyard
fuente
1

Usar -match no es una buena opción porque un $ env: USERNAME de "ed" coincidirá con "fred" y "edith". En su lugar, use -eq para una coincidencia exacta y agregue el dominio si es necesario. Utilizo un bucle foreach al final para quitar todos los espacios en blanco iniciales como alternativa a "select fullname | ft -HideTableHeaders", que imprime una nueva línea inicial y final.

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

Si siempre tiene .Net 3.5 o superior (que debería tener con PowerShell v4.0 y superior):

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

Esa clase proporciona un acceso muy fácil a todas las propiedades comunes de LDAP, por lo que no necesita buscar dos veces (una con WinNT y otra con LDAP) ni utilizar [ADSISearcher]para hacer una búsqueda de LDAP si desea algunas propiedades extendidas que WinNT no implementa .

Pedacitos de tocino
fuente
0

Si no desea utilizar el módulo Active Directory, no puede hacerlo; a menos que desee profundizar aún más y realizar una consulta LDAP real contra un controlador de dominio.

Cualquier información de usuario que no sea el nombre de usuario se almacena en Active Directory, y debe recuperarse allí.

Massimo
fuente
Pero cuando abro el menú de inicio, ¡aquí se muestra el nombre completo del usuario! Quiero decir, ¿debe almacenarse en algún lugar?
Jonathan Rioux
44
Sí, está almacenado en alguna parte. Está almacenado en Active Directory.
Katherine Villyard
Probablemente también esté almacenado / en caché en el registro, pero no lo encontré fácilmente y me di por vencido.
mfinni
1
Es cierto que está almacenado en AD, pero la [ADSI]interfaz ha durado mucho más tiempo que los módulos de AD, y realmente no es tan complicado, como muestra la respuesta aceptada.
Hunter Eidson