Quando você trabalha com o Windows, em algum momento, provavelmente precisará descobrir quais contas de usuário estão atualmente conectadas a um computador. Felizmente, você pode usar o PowerShell para obter os usuários atuais em computadores locais ou remotos.
Você tem senhas comprometidas em 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 que você aprenderá incluirão comandos nativos, classes .NET e cmdlets específicos do Windows Management Instrumentation (WMI).
Está pronto para descobrir quem está rondando em seu computador? Vamos começar!
Pré-requisitos
Neste tutorial, você aprenderá melhor seguindo os exemplos. E para fazer 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 com Windows Server 2019 chamado DC1.
Por que usar o PowerShell para obter os usuários atuais conectados a um computador?
1. Admito que existem maneiras de obter usuários atuais conectados a um computador sem usar o PowerShell. Afinal, os administradores do sistema precisavam ter uma maneira de fazer isso mesmo antes do PowerShell, certo?
Fazer a mesma tarefa no PowerShell oferece benefícios 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 razões para usar o PowerShell para obter usuários atuais, mas o resultado final se resume às suas necessidades. E este tutorial irá ensinar as diferentes maneiras de alcançar esse objetivo.
Consultando a 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 logado, usando as classes de Windows Management Instrumentation (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 recente e seguro, disponível até as últimas versões 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 qualquer 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.
Nota: Consultar a classe Win32_ComputerSystem irá retornar apenas o nome de usuário da pessoa que está logada no computador diretamente (sessão no console). Se o usuário estiver logado remotamente (por exemplo, Remote Desktop), o nome de usuário estará em branco.
Ambos os comandos retornam o mesmo resultado, como 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ê precisar 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 na captura de tela abaixo.

Lendo as Variáveis de Ambiente do Windows
Outra maneira de usar o PowerShell para obter o usuário atual em um computador é recuperar valores das variáveis de ambiente. As variáveis de ambiente representam os dados do sistema operacional, incluindo o nome de usuário atual, entre outros.
Existem três maneiras de interagir com as variáveis de ambiente. Qualquer maneira que você escolha retornaria o mesmo resultado.
O Env PowerShell Drive
PowerShell armazena em cache as variáveis de ambiente e as disponibiliza por meio de um PowerShell Drive (PSDrive) chamado Env:
drive. PSDrives são locais de dados que você pode acessar como uma unidade 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
, de forma semelhante à listagem do 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 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 uma unidade PSDrive tratando-as como arquivos em uma unidade, outra maneira é acessar a unidade Env
como uma variável. Isso significa que 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 de Ambiente .NET
O PowerShell é uma linguagem e shell orientado a objetos. Basicamente, tudo com que você trabalha dentro do 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 dados que representam, semelhante a projetos. E esses projetos são chamados 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 de nome de usuário, 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 do 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. Essa 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 de 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 aplique 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 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 de usuário (UPN) do usuário atual. A saída deste comando pode ser útil se você pretende executar um script que obtenha a identidade completa do usuário atual, 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 só estão disponíveis 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 do 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 desktop remoto 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 do comandoquery 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, inclusive aquelas que não são de 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.
Após executar o comando, você perceberá 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: IDLE TIME
, que mostra o tempo ocioso dos usuários, e LOGON TIME
, mostrando o timestamp de logon dos usuários.

No final, comparando os resultados do qwinsta
e 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
Enquanto existem muitas maneiras no PowerShell de obter os usuários atualmente conectados, qual método é o melhor depende do resultado que você pretende obter e de como pretende 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 formas 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 atenderá aos seus requisitos para usar o PowerShell e obter o usuário atual. E agora? Talvez aprender como analisar os resultados do comando de consulta e convertê-los em objetos PowerShell escrevendo funções com RegEx?
Source:
https://adamtheautomator.com/powershell-get-current-user/