Когда пользователь вошел в систему, он может легко использовать quser.exe, чтобы увидеть всех вошедших в систему пользователей.

Я хочу запускать запланированное задание (запущенное как SYSTEM) в разное время, и одна функция в сценарии может сделать что-то, что может вызвать перезагрузку. Таким образом, перед запуском этой функции мне нужно сначала проверить, не вошли ли пользователи.

В Win7 я проверял вывод:

quser.exe 2>&1

для строки "Нет пользователя существует", и это прекрасно работает. Однако в Win10 он не работает.

Вывод этой же команды в Win10, когда никто не вошел в систему, кажется пустым / пустым. Пустое значение кажется опасной для проверки, потому что существует множество возможных источников ошибок для пустой строки, приводящей к неожиданной перезагрузке пользователя. Я не могу использовать уведомление и обратный отсчет, чтобы предупредить пользователя.

Есть ли какой-либо другой (очевидно, автоматический) способ проверки того, что в данный момент пользователи не вошли в систему?

1 ответ1

0

Вместо того, чтобы использовать quser (т. Е. Пользователь запроса) и полагаться на действительный пустой возврат, кажется, что лучшим решением будет qwinsta (т. Е. Сеансы запросов).

По сути, запрос для всех сессий, и анализировать возвращаемые имена пользователей. Сеансы, запущенные в службах или SYSTEM, не имеют имени пользователя. Итак, в 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) {
...

Если переменная $userSessions , пользователи не будут зарегистрированы. Если оно не пустое, либо пользователи вошли в систему, либо произошла ошибка. Не идеально, но безопаснее.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .