如何在 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为空,则表示没有用户登录。如果不为空,则表示用户已登录或出现错误。虽然不完美,但更安全。

相关内容