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.