Como testar para usuários não autenticados no Win10

0

Quando um usuário está logado, ele pode facilmente usar quser.exe para ver todos os usuários logados.

Eu quero executar uma tarefa agendada (executando como SYSTEM) em vários momentos, e uma função no script tem o potencial de fazer algo que poderia iniciar uma reinicialização. Assim, antes que essa função seja executada, preciso primeiro verificar se algum usuário está logado.

No Win7, verifiquei a saída de:

quser.exe 2>&1

para uma string "Nenhum usuário existe", e isso funciona muito bem. Não está trabalhando no Win10 no entanto.

A saída desse mesmo comando no Win10 quando ninguém está logado parece estar em branco / vazio. Um valor vazio parece ser uma coisa arriscada para testar porque há muitas fontes de erro possíveis para uma cadeia vazia que leva a uma reinicialização inesperada do usuário. Não consigo usar uma notificação e contagem regressiva para avisar o usuário.

Existe alguma outra maneira (automatizada, obviamente) para verificar se nenhum usuário está logado no momento?

    
por Teknowledgist 06.03.2018 / 21:37

1 resposta

0

Em vez de usar quser (ou seja, consultar usuário) e confiar em um retorno válido e vazio, uma solução melhor parece ser com qwinsta (ou seja, sessões de consulta).

Basicamente, consulte todas as sessões e analise o retorno dos nomes de usuários. Sessões em execução em serviços ou SYSTEM não possuem um nome de usuário. Então, no PowerShell:

$qwinstaOut = & "$env:windir\system32\QWinSta.exe"
if (-not $qwinstaOut) {
   $UserSessions = "unknown"
} else {
   $UserSessions = $qwinstaOut[1..($qwinstaOut.count-1)] | % {$_.substring(19)} | ? {$_ -match "^\w"}
}
# If there are no sessions with a username, this must be running as SYSTEM
if (-not $UserSessions) {
...

Se a variável $userSessions estiver em branco, nenhum usuário está conectado. Se não estiver em branco, os usuários estão conectados ou houve um erro. Não é perfeito, mas é mais seguro.

    
por 07.03.2018 / 17:47