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?
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?
Respuestas:
$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:
Tratar:
[adsi]"WinNT://$dom/$usr,user" | select *
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
Un revestimiento usando Powershell 3.0:
gwmi win32_useraccount | where {$_.caption -match $env:USERNAME} | select fullname | ft -HideTableHeaders
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.
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}
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 .
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í.
[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.