Win10에서 로그인한 사용자가 없는지 테스트하는 방법

Win10에서 로그인한 사용자가 없는지 테스트하는 방법

사용자가 로그인하면 quser.exe를 사용하여 로그인된 모든 사용자를 쉽게 볼 수 있습니다.

예약된 작업(SYSTEM으로 실행)을 여러 번 실행하려고 하는데 스크립트의 한 함수가 재부팅을 시작할 수 있는 작업을 수행할 가능성이 있습니다. 따라서 해당 기능을 실행하기 전에 먼저 로그인한 사용자가 있는지 확인해야 합니다.

Win7에서는 다음의 출력을 확인했습니다.

quser.exe 2>&1

"사용자가 존재하지 않습니다" 문자열에 대해 설명했는데 훌륭하게 작동합니다. 그러나 Win10에서는 작동하지 않습니다.

아무도 로그인하지 않은 경우 Win10에서 동일한 명령의 출력은 비어 있는 것으로 나타납니다. 빈 문자열로 인해 사용자가 예기치 않은 재부팅을 경험하게 되는 오류 원인이 많기 때문에 빈 값은 테스트하기 위험한 것처럼 보입니다. 알림 및 카운트다운을 사용할 수 없습니다.사용자에게 경고합니다.

현재 로그인한 사용자가 없는지 확인하는 다른(자동화된) 방법이 있습니까?

답변1

사용(예: 쿼리 사용자)과 유효하고 빈 반환에 의존하는 것보다 더 나은 솔루션 (예: 쿼리 세션) 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비어 있으면 로그인된 사용자가 없는 것입니다. 비어 있지 않으면 사용자가 로그인되어 있거나 오류가 발생한 것입니다. 완벽하지는 않지만 더 안전합니다.

관련 정보