Como testar NÃO usuários logados no Win10

Como testar NÃO usuários logados no Win10

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

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 possa iniciar uma reinicialização. Portanto, antes que essa função seja executada, preciso primeiro verificar se algum usuário está logado.

No Win7, tenho verificado a saída de:

quser.exe 2>&1

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

A saída desse mesmo comando no Win10 quando ninguém está logado parece estar em branco/vazio. Um valor vazio parece algo arriscado de se testar porque há muitas fontes de erro possíveis para uma string vazia, levando o usuário a sofrer uma reinicialização inesperada. Não consigo usar uma notificação e contagem regressivapara avisar o usuário.

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

Responder1

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

Basicamente, consulte todas as sessões e analise o retorno dos nomes de usuário. As sessões executadas 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 $userSessionsestiver em branco, nenhum usuário está logado. Se não estiver em branco, os usuários estão logados ou houve um erro. Não é perfeito, mas é mais seguro.

informação relacionada