You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

关于Windows当前会话登录时间、登录时长查询及任务管理器Uptime疑问的技术咨询

关于Windows当前会话登录时间、登录时长查询及任务管理器Uptime疑问的技术咨询

嘿,我来帮你捋清楚这几个问题哈!

一、用PowerShell查询当前用户会话的登录时长

这里有两个实用的方法,你可以根据自己的情况选:

方法1:通过安全日志获取精确登录时间

Windows的安全日志会记录每次用户登录的事件,我们可以用PowerShell提取最近一次交互式登录的时间,再自动计算时长:

# 获取最近一次交互式登录事件
$loginEvent = Get-WinEvent -FilterHashtable @{LogName='Security';Id=4624} | 
              Where-Object {$_.Properties[8].Value -eq 2} | 
              Select-Object -Last 1

# 计算并显示登录时长
$loginTime = $loginEvent.TimeCreated
$sessionDuration = (Get-Date) - $loginTime
Write-Host "你当前会话已登录: $($sessionDuration.Days)天 $($sessionDuration.Hours)小时 $($sessionDuration.Minutes)分钟"

注:事件ID4624是登录成功事件,Properties[8].Value -eq 2代表交互式登录(就是你手动输入密码/刷脸登录的类型,会排除远程登录、服务自动登录等其他场景)。

方法2:用quser命令快速查询

这个方法更轻量,不需要读取安全日志(有些场景下安全日志可能被清理或者你没有权限访问):

# 获取当前用户的会话信息
$sessionInfo = quser $env:USERNAME | Select-Object -Skip 1

# 解析登录时间并计算时长
$logonTimeParts = $sessionInfo -split '\s+' | Select-Object -Index 4,5
$logonTime = [datetime]::Parse("$($logonTimeParts[0]) $($logonTimeParts[1])")
$sessionDuration = (Get-Date) - $logonTime
Write-Host "当前会话已持续: $($sessionDuration.Hours)小时 $($sessionDuration.Minutes)分钟"

直接执行quser $env:USERNAME也能看到原始的会话信息,其中“Logon Time”列就是你当前会话的登录时间。

二、为什么任务管理器的Uptime显示7天?

你完全没理解错!任务管理器里的Uptime是系统的运行时长,不是你当前用户的会话时长

  • 系统Uptime是从Windows开机(或最后一次重启)到现在的总时间,哪怕中间你锁屏、休眠、切换用户,只要系统没重启,这个时长就会一直累计。
  • 而你的用户会话时长是你这次登录到现在的时间,和系统Uptime是完全独立的两个概念。

举个例子:你7天前打开电脑后一直没关机重启,期间可能多次锁屏、甚至切换过其他用户,但系统始终在运行,所以任务管理器显示Uptime为7天;而你可能是今天才登录回自己的用户账号,那你的当前会话时长就只有几个小时,和系统Uptime没关系~

备注:内容来源于stack exchange,提问作者Yanjan. Kaf.

火山引擎 最新活动