Cómo probar si NO hay usuarios registrados en Win10

Cómo probar si NO hay usuarios registrados en Win10

Cuando un usuario inicia sesión, puede usar fácilmente quser.exe para ver todos los usuarios que iniciaron sesión.

Quiero ejecutar una tarea programada (que se ejecuta como SISTEMA) en varios momentos, y una función en el script tiene el potencial de hacer algo que podría iniciar un reinicio. Por lo tanto, antes de que se ejecute esa función, primero debo verificar si algún usuario ha iniciado sesión.

En Win7, he estado comprobando el resultado de:

quser.exe 2>&1

para una cadena "No existe ningún usuario", y eso funciona muy bien. Sin embargo, no funciona en Win10.

La salida de ese mismo comando en Win10 cuando nadie ha iniciado sesión parece estar en blanco/vacío. Un valor vacío parece algo arriesgado para realizar pruebas porque hay muchas fuentes de error posibles para una cadena vacía que lleva a que un usuario experimente un reinicio inesperado. No puedo usar una notificación y una cuenta regresivapara advertir al usuario.

¿Existe alguna otra forma (automatizada, obviamente) de verificar que ningún usuario haya iniciado sesión actualmente?

Respuesta1

En lugar de usar quser(es decir, consultar al usuario) y confiar en un retorno vacío y válido, una mejor solución parece ser qwinsta(es decir, sesiones de consulta).

Básicamente, consulte todas las sesiones y analice la devolución de los nombres de usuario. Las sesiones que se ejecutan bajo servicios o SISTEMA no tienen un nombre de usuario. Entonces en 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) {
...

Si la variable $userSessionsestá en blanco, ningún usuario ha iniciado sesión. Si no está en blanco, los usuarios han iniciado sesión o hubo un error. No perfecto, pero sí más seguro.

información relacionada