Quando trabalha com o Windows, em algum momento, provavelmente precisará descobrir quais contas de usuário estão atualmente logadas em um computador. Felizmente, você pode usar o PowerShell para obter os usuários atuais em computadores locais ou remotos.
Você possui senhas comprometidas no seu Active Directory? Descubra com o Specops Password Auditor Free.
Neste tutorial, você aprenderá várias maneiras de usar o PowerShell para obter os usuários atuais em um computador. Os métodos incluirão comandos nativos, classes .NET e cmdlets específicos do Windows Management Instrumentation (WMI).
Está pronto para descobrir quem está rondando o seu computador? Vamos começar!
Pré-requisitos
Neste tutorial, será melhor aprender seguindo os exemplos. Para isso, você precisará de um computador que execute qualquer versão moderna do Windows, como o Windows 10, Windows Server 2012 ou posterior.
Este tutorial usará um computador executando o Windows Server 2019 chamado DC1.
Por que usar o PowerShell para obter os usuários atuais logados em um computador?
Admito que existem maneiras de fazer com que os usuários atuais façam login em um computador sem PowerShell. Afinal, os administradores do sistema precisavam ter um método para fazer isso mesmo antes do PowerShell, certo? Se sim, por que usar o PowerShell?
Fazer a mesma tarefa no PowerShell beneficia ao tratar os resultados como objetos que você pode manipular. Por exemplo, se você executar um script que solicita as credenciais do usuário, o PowerShell pode popular programaticamente o nome de usuário, e você só precisa digitar a senha manualmente.
Outro exemplo do mundo real é exportar a lista de usuários atualmente conectados a um servidor para um arquivo. Isso é feito usando o PowerShell para obter os usuários atuais e depois exportar o resultado para arquivos CSV, HTML ou XML. Em seguida, vários fluxos de trabalho de automação podem usar essa saída.
Pode haver milhares de motivos para usar o PowerShell para obter os usuários atuais, mas no final tudo se resume aos seus requisitos. E este tutorial irá ensinar as diferentes maneiras de alcançar esse objetivo.
Consulta à Classe Win32_ComputerSystem
Vamos começar com os cmdlets nativos do PowerShell chamados Get-WMIObject
e Get-CimInstance
. Esses cmdlets permitem que você consulte informações, incluindo o usuário atualmente conectado, usando as classes de Gestão do Windows (WMI) em um computador local ou remoto.
Get-WMIObject
é o cmdlet mais antigo (obsoleto) e está disponível apenas até o Windows PowerShell 5.1. Por outro lado,Get-CIMInstance
é o cmdlet mais novo e seguro, disponível até as versões mais recentes do PowerShell.
Para saber mais, visite Get-CIMInstance Vs. Get-WMIObject: Qual a Diferença?
Para usar o PowerShell para obter o usuário atual, invoque o cmdlet direcionando a classe Win32_ComputerSystem. A classe Win32_ComputerSystem inclui várias propriedades, incluindo a propriedade Username
. Para fazer isso, abra uma janela do PowerShell e execute os comandos abaixo.
Observação: Consultar a classe Win32_ComputerSystem somente retornará o nome de usuário da pessoa que está conectada diretamente ao computador (sessão no console). Se o usuário estiver conectado remotamente (por exemplo, Área de Trabalho Remota), o nome de usuário será vazio.
Ambos os comandos retornam o mesmo resultado, conforme mostrado abaixo. Se o usuário atual for uma conta de usuário de domínio, o comando retornará o domínio e o nome de usuário (domínio\nome de usuário
). Mas para uma conta de usuário local, a saída seria computador\nome de usuário
.

Get-WMIObject
eGet-CimInstance
possuem um parâmetro chamado-computerName
, que aceita o nome do computador para consulta. Usar este parâmetro significa que você pode consultar as mesmas informações de uma máquina remota na rede.
Mas se você precisa obter apenas o nome de usuário sem o domínio, uma solução é dividir a saída usando o método split()
. Para fazer isso, execute o comando abaixo no PowerShell.
Como resultado, o PowerShell retorna apenas a parte do usuário, como no screenshot abaixo.

Lendo as Variáveis de Ambiente do Windows
Outra maneira de usar o PowerShell para obter o usuário atual em um computador é recuperando valores das variáveis de ambiente. As variáveis de ambiente representam os dados do sistema operacional, incluindo o nome de usuário do usuário atual, entre outros.
Existem três maneiras de interagir com as variáveis de ambiente. Qualquer maneira que você escolha retornará o mesmo resultado.
O Env PowerShell Drive
O PowerShell armazena em cache as variáveis de ambiente e as torna disponíveis por meio de um Drive PowerShell (PSDrive) chamado drive Env:
. Os PSDrives são locais de dados que você pode acessar como um drive no computador (por exemplo, C:), mas só são acessíveis dentro do PowerShell.
O PowerShell cria automaticamente a unidade Env:
assim que você abre uma sessão do PowerShell. E como Env:
é uma unidade, você pode obter seu conteúdo invocando o cmdlet Get-ChildItem
, semelhante a como você listaria o conteúdo de uma unidade ou pasta do sistema de arquivos.
Usando a unidade Env: No PowerShell, obtenha o usuário atual executando o comando abaixo.
A captura de tela abaixo mostra o resultado esperado. Como você pode ver, o comando retorna o item USERNAME
e seu valor correspondente, que é o usuário atualmente conectado.

Para retornar apenas o valor do nome de usuário, modifique o comando conforme mostrado abaixo e execute-o novamente no PowerShell.
E como você pode ver abaixo, o comando retorna apenas o valor do nome de usuário como uma string.

A Variável $env
Além de acessar as variáveis de ambiente como um PSDrive, tratando-as como arquivos em uma unidade, outra maneira é acessar a unidade Env
como uma variável. Ou seja, você pode fazer referência às variáveis de ambiente usando a sintaxe abaixo.
Com base na sintaxe mencionada, execute o comando abaixo no PowerShell para obter o usuário atual.
Conforme mostra a captura de tela abaixo, o comando retorna o valor do nome de usuário.

A Classe Environment do .NET
O PowerShell é uma linguagem e shell orientados a objetos. Essencialmente, tudo com que você trabalha no PowerShell é um objeto. Quando você executa um comando, a saída é um objeto. Se você declarou uma variável, essa variável é um objeto em si. Você entendeu a ideia.
Esses objetos têm uma estrutura que define o tipo de dado que representam, semelhante a plantas baixas. E essas plantas baixas são chamadas de classes .NET ou simplesmente classes.
Quanto às variáveis de ambiente, a classe associada a elas é a classe Environment. Então, como você utiliza a classe Environment no PowerShell para obter o usuário atual?
Assim como a variável $env
, a classe Environment possui uma propriedade Username
, cujo valor é o nome de usuário atual. Para obter o valor da propriedade username, execute o comando abaixo no PowerShell.

Além da propriedade Username
, a classe Environment também possui um método para obter o valor de uma variável de ambiente. O nome desse método é GetEnvironmentVariable
.
Para obter o usuário atual usando esse método, execute o comando abaixo.

Usando a classe .NET WindowsIdentity.
A classe WindowsIdentity é outra classe .NET que você pode invocar no PowerShell para obter o usuário atual. Esta classe possui um método chamado GetCurrentName
, que retorna um objeto que representa o usuário atual do Windows.
Para obter os detalhes do usuário atual, execute o comando abaixo.
Como você pode ver abaixo, o comando retorna as propriedades do objeto do usuário atual, incluindo a propriedade Name
. O formato do valor da propriedade Name
segue a convenção domínio\usuário
.

Para retornar apenas a parte do nome de usuário, modifique o comando anterior para selecionar apenas a propriedade Name
e aplicar a técnica de divisão de strings. Para fazer isso, copie o comando abaixo e execute-o no PowerShell.

Usando o Comando whoami
Outro comando útil que permite obter rapidamente o usuário atual é o comando whoami
. Este comando é um arquivo executável que você pode encontrar na pasta %WINDIR%\System32 com o nome de arquivo whoami.exe
.
Para obter o nome de usuário do usuário atual, execute o comando abaixo.
O comando então retorna o resultado no formato domínio nome de usuário
, como na captura de tela abaixo.

Para obter o nome de usuário sem o domínio, aplique a técnica de divisão de strings que você aprendeu anteriormente neste tutorial, executando o comando abaixo.

O comando whoami
também pode retornar o nome distinto totalmente qualificado (FQDN) e o nome principal do usuário (UPN) atual. Essa saída de comando pode ser útil se você pretende executar um script que obtenha a identidade atual do usuário além do nome de usuário.
Execute o comando abaixo no PowerShell para obter o FQDN e UPN do usuário atual.

Nota: Os valores de FQDN e UPN estão disponíveis apenas se o usuário atualmente conectado for um usuário de domínio. Se você tentar obter esses valores para um usuário local, o comando retornará um erro, como mostrado abaixo.

Usando o comando query
Se você é um administrador de sistema ou um usuário de domínio, é provável que tenha se conectado a uma máquina remota via Protocolo de Área de Trabalho Remota (RDP) pelo menos uma vez, talvez para gerenciar recursos ou usar aplicativos. Qualquer que seja o motivo, você gostaria de saber quem está atualmente conectado e usando os recursos do sistema.
Felizmente, o Windows possui uma ferramenta de linha de comando integrada chamada query
que pode listar todos os usuários atualmente conectados a um computador. O comando também mostra se o usuário fez login por meio de uma sessão de área de trabalho remota ou localmente no computador.
O comando query
possui dois parâmetros pertinentes para obter os usuários conectados; session
e user
. O parâmetro session
lista as sessões do computador, enquanto o parâmetro user
lista os usuários e suas sessões.
O comando
query session
possui um alias chamadoqwinsta
, enquanto o alias de comando paraquery user
équser
.
Por exemplo, execute o comando abaixo para listar as sessões em DC1.
A captura de tela abaixo mostra a saída do comando. Neste exemplo, dois usuários fizeram login no computador DC1 – um na sessão do console e outro via RDP. Como você pode ver, o qwinsta
retorna todas as sessões, mesmo aquelas não relacionadas a usuários.

Se você executar o
qwinsta
ou oquser
sozinho, sem o argumento/server:<computador>
, ambos os comandos consultarão o computador local por padrão.
Em seguida, para listar todos os usuários com sessões de login existentes, execute o comando user
abaixo.
Depois de executar o comando, você notará imediatamente que o quser
retorna as sessões e os usuários como o comando qwinsta
. Mas desta vez, não há sessões em branco.
Também existem duas colunas adicionais: TEMPO DE INATIVIDADE
, que mostra o tempo de inatividade dos usuários, e HORA DE LOGIN
mostrando o horário de login dos usuários.

No final, comparando os resultados do qwinsta
e do quser
, quser
é o comando mais apropriado no PowerShell para obter usuários atuais.
Você tem senhas comprometidas no seu Active Directory? Descubra com Specops Password Auditor Free.
Conclusão
Embora existam muitas maneiras no PowerShell de obter os usuários atualmente conectados, qual método é melhor depende do resultado que você pretende obter e como você vai usá-lo.
Os cmdlets nativos relacionados ao WMI e o comando query
permitem que você obtenha os usuários conectados em um computador local ou remoto. Usar classes .NET e variáveis de ambiente oferece maneiras rápidas de obter os mesmos resultados, mas apenas no computador local.
Se você planeja executar um script ou exibir manualmente os resultados na tela, existe um método que atenderia aos seus requisitos para usar o PowerShell para obter o usuário atual. E depois? Talvez aprender como analisar os resultados do comando de consulta e convertê-los em objetos do PowerShell escrevendo funções com RegEx?
Source:
https://adamtheautomator.com/powershell-get-current-user/