Eu preciso de uma maneira no PowerShell (idealmente PS2.0+) para listar todas as contas de usuário em um sistema local onde um usuário tem uma presença local, mas onde os usuários podem não ser usuários locais per se. Isso quer dizer que o dispositivo pode estar conectado a um domínio, onde um comando como get-WMIObject Win32_UserAccount
listará todos os usuários no domínio e (provavelmente) atingirá o tempo limite ou será executado em um erro de permissão porque o comando está sendo executado a partir do contexto do usuário local (mesmo que esteja sendo executado como a conta LocalSystem).
Aqui estão as várias maneiras que conheço para enumerar usuários e por que eles são inadequados.
get-WMIObject Win32_UserAccount -Filter {LocalAccount="True"}
Isso não mostra os usuários do domínio que realmente fizeram login no dispositivo; ele mostra apenas os usuários que foram configurados localmente no dispositivo em questão, deixando contas de usuários em potencial na mesa.net user
Como acima.get-WMIObject Win32_UserAccount
(sem argumentos adicionais)
Em dispositivos conectados a um domínio adequadamente grande, essa consulta trava e, eventualmente, é encerrada com um erro de "tarefa cancelada", pois está tentando enumerar vários milhares de usuários. Eu só preciso dos usuários com presença no dispositivo local.- Enumerate
HKEY_USERS
Este hive apenas enumera como chaves os perfis dos usuários que estão logados no momento da consulta . - Enumerar
C:\Users
Isso funciona, mas estou relutante em usá-lo; parece tão impreciso. Além disso, também adiciona contas inúteis comoDefault
ePublic
nas quais não estou interessado.
Tentarei antecipar reclamações como a resposta a esta pergunta semelhante ("então você precisa reprojetar seu aplicativo"), observando que não estou tentando coletar dados desses perfis de usuário. Tudo o que preciso é enumerá-los; um valor accountName é bastante suficiente.
Existe um livro-razão ou lista em algum lugar no Windows que eu possa consultar esses dados além de examinar as pastas?
A chave do Registro
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
contém subchaves para todas as contas que possuem um diretório de perfil de usuário conhecido pelo Windows. Todos no grupo local "Usuários" têm permissões de leitura para essa chave.As subchaves são nomeadas de acordo com os SIDs da conta, que você pode mapear para um nome de usuário usando as APIs existentes :
Use a tabela de SIDs conhecidos para filtrar SIDs ou prefixos de SID indesejados de "conta interna". (Geralmente os SIDs de todas as contas "reais" começam com
S-1-5-21-
.)