Recuperar o nome completo do usuário do domínio atual

22

Usando o PowerShell, como posso obter o nome completo do usuário do domínio atualmente conectado (não apenas seu nome de usuário) sem a necessidade do módulo ActiveDirectory?

    
por Jonathan Rioux 17.03.2014 / 21:09

7 respostas

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

Retorna:

John Doe

Algumas outras propriedades (principalmente) obscuras também estão disponíveis. Alguns úteis:

  • Homedrive UNC
  • Carta do Homedrive
  • Descrição
  • Script de login

Tente:

[adsi]"WinNT://$dom/$usr,user" | select *
    
por 17.03.2014 / 21:30
13

Eu gosto da resposta aceita, mas só porque eu queria tentar fazer isso:

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

retorna:

FullName
--------
TheCleaner

ou se você deseja não ter as informações do cabeçalho e apenas o resultado:

$user = whoami
Get-WMIObject Win32_UserAccount | where caption -eq $user | select FullName | ft -hide
    
por 17.03.2014 / 21:57
7

Um forro usando o Powershell 3.0:

gwmi win32_useraccount | where {$_.caption -match $env:USERNAME} | select fullname | ft -HideTableHeaders
    
por 17.03.2014 / 22:35
3

Baseado no seu comentário sobre a resposta aceita de Craig620,

Do I need domain admin rights to run this command? Or can the domain user itself can run this command?

Parece que você está tentando evitar a instalação de módulos do PowerShell nas estações de trabalho dos usuários, sim, mas também, não, você não precisa ser um administrador de domínio para procurar seu próprio nome no AD. Você pode procurar praticamente qualquer informação que apareça na GAL no Outlook, incluindo nome completo, como usuário padrão.

Você também pode procurar nomes completos de outras pessoas como um usuário padrão no AD (usando Get-WmiObject Win32_userAccount , se quiser evitar os módulos do AD). Contas de serviço que consultam o AD (bem, antes de contas de serviço gerenciadas ) são geralmente usuários padrão do AD, sem privilégios.

    
por 17.03.2014 / 23:50
1

O uso de -match não é uma boa escolha porque um $ env: USERNAME de "ed" corresponderá a "fred" e "edith". Em vez disso, use -eq para uma correspondência exata e inclua o domínio, se necessário. Eu uso um loop foreach no final para remover todos os espaços em branco como uma alternativa para "select fullname | ft -HideTableHeaders" que imprime uma nova linha inicial e final.

gwmi win32_useraccount | where {$_.caption -eq $("domain\" + $env:USERNAME)} | foreach {$_.fullname}
    
por 09.03.2015 / 19:57
1

Se você sempre tem o .Net 3.5 ou superior (o que você deve usar com o PowerShell v4.0 e superior):

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

Essa classe fornece acesso muito fácil a todas as propriedades comuns do LDAP, portanto, você não precisa pesquisar duas vezes (uma com o WinNT e novamente com o LDAP) ou usar [ADSISearcher] para fazer uma pesquisa LDAP se desejar algumas propriedades estendidas que o WinNT não implementa.

    
por 07.03.2016 / 22:55
0

Se você não quiser usar o módulo do Active Directory, não poderá; a menos que você queira ir ainda mais fundo e realizar uma consulta LDAP real em um controlador de domínio.

Qualquer informação de usuário que não seja o nome de usuário é armazenada no Active Directory e deve ser recuperada lá.

    
por 17.03.2014 / 21:17