2012-12-24 14:24:07 +0000 2012-12-24 14:24:07 +0000
112
112

如何查找Windows最后一次重启的时间?

如何知道运行Windows 7的计算机最后一次重启的时间?

我更倾向于一种不涉及搜索事件日志的解决方案,而是类似wmic或者cmd命令。

Réponses (14)

173
173
173
2012-12-24 14:32:31 +0000

systeminfo命令几乎可以满足你的需求。在英文Windows 7上,你也可以这样做:

systeminfo | find /i "Boot Time"

或者在WMIC的帮助下:

wmic os get lastbootuptime

在Windows 7和Windows XP的主要区别在于,在Windows 7中,微软可以只显示最后的启动时间。

25
25
25
2014-12-09 15:34:46 +0000

另一个方法是使用下面的命令行,在Windows XP和Windows 7中都可以使用:

net statistics workstation

它的优点是在格式化日期时比systeminfo的替代方案更快(而wmic没有)。你还可以得到一些其他的信息,如果你实际使用这个命令来调试电脑的话,这些信息可能会很有用(因为你是专门问cmd,我假设你不是在用程序来调试)。http://technet.microsoft.com/en-us/library/bb490714.aspx

以下是一个结果的例子(使用的是Windows 7 Pro SP1 x64的法语版本,用户语言对命令行来说并不重要):

(电脑名称是故意模糊的)


更多详情请访问 http://en. wikipedia.org/wiki/Uptime 关于确定系统正常运行时间的准确性。


  • 重要的是:这种方法是确定计算机最后一次启动的时间,而不是正常运行时间。如果你使用休眠/休眠,这两个数字会有所不同。
19
19
19
2012-12-24 14:41:41 +0000

这就是LastBootUpTime类的Win32_OperatingSystem属性。你可以用这个命令来使用WMIC:

wmic os get lastbootuptime
Get-WmiObject -class Win32_OperatingSystem | Select-Object __SERVER,@{label='LastBootUpTime';expression={$_.ConvertToDateTime($_.LastBootUpTime)}}

或者如果你使用Powershell,你可以把时间转换为比WMI的日期时间格式更易读的东西。注意,在PowerShell的后期版本中,你也可以使用Get-CimInstance,它将自动返回一个日期时间值:

Get-CimInstance -Class Win32_OperatingSystem | Select-Object LastBootUpTime

唯一令人恼火的是,Get-CimInstance有时会改变WMI对象中一些系统字段的名称,比如这里的"_/SERVER"。你必须使用CSNamePSComputerName,这似乎对我来说是可行的。

9
9
9
2017-03-28 13:19:57 +0000
4
4
4
2018-08-21 07:51:22 +0000

请注意,正如 Alex 所指出的,/sleepstudy 命令是在 Windows 8.1 之前才加入的。请注意/systempowerreport可能会起作用。

请注意,其他一些答案对我来说从来没有起作用,比如搜索事件日志总是缺少一些条目。@Florisz的答案在这方面也是正确的。下面是我的解决方法:

在管理员cmd shell中,运行以下命令:

powercfg /sleepstudy /output sleepstudy.html

然后在浏览器中打开文件sleepstudy.html。你将会看到**过去三天来的关机/重启/待机/休眠的统计数据。(所以,如果你需要的话,可以定期运行)

一个输出的例子。(AFAIR, Showdown (Hybrid)表示快速启动)

源码/文档 | 也是相关的

2
2
2
2016-05-24 20:46:59 +0000

另一种在批处理文件中获取wmic开机时间的方法,但以人类可读的形式:

for /f %%a in ('WMIC OS GET lastbootuptime ^| find "."') DO set DTS=%%a
set BOOTTIME=%DTS:~0,4%-%DTS:~4,2%-%DTS:~6,2% %DTS:~8,2%:%DTS:~10,2%
echo DTS : %DTS%
echo BOOTTIME :%BOOTTIME%

输出:

DTS : 20170308073729.491206+060

BOOTTIME : 2017-03-08 07:37

2
2
2
2017-10-07 19:32:19 +0000

你可以使用PowerShell来实现。

Shutdown


Get-WinEvent -LogName Microsoft-Windows-Diagnostics-Performance/Operational | Where { $_.Id -eq 200 }

这将给你一个记录的关机时间列表。

另一个命令,更好地优化了远程连接:

Get-WinEvent -FilterHashtable @{LogName = "Microsoft-Windows-Diagnostics-Performance/Operational"; Id = 200; }

示例输出: “` TimeCreated Id LevelDisplayName Message


2017-01-28 18:25:46 200 Critical Windows has shutdown 2016-11-01 19:55:21 200 Error Windows has shutdown 2016-10-29 00:18:38 200 Critical Windows has shutdown 2016-10-26 23:16:55 200 Warning Windows has shutdown 2016-10-26 15:37:40 200 Warning Windows has shutdown 2016-10-26 02:18:24 200 Warning Windows has shutdown 2016-10-26 02:10:34 200 Warning Windows has shutdown 2016-10-26 02:04:01 200 Warning Windows has shutdown 2016-10-25 14:23:11 200 Warning Windows has shutdown 2016-10-25 13:07:46 200 Error Windows has shutdown 2016-10-25 00:18:12 200 Error Windows has shutdown 2016-10-19 13:16:39 200 Critical Windows has shutdown ”`

Startup


下面的命令将给你一个记录的启动时间列表。

Get-WinEvent -LogName Microsoft-Windows-Diagnostics-Performance/Operational | Where { $_.Id -eq 100}
Get-WinEvent -FilterHashtable @{LogName = "Microsoft-Windows-Diagnostics-Performance/Operational"; Id = 100; }

另一个命令,为远程连接做了更好的优化:

TimeCreated Id LevelDisplayName Message
----------- -- ---------------- -------
2017-10-07 21:35:38 100 Critical Windows has started up
2017-01-28 18:25:48 100 Critical Windows has started up
2016-12-11 17:45:07 100 Critical Windows has started up
2016-11-16 13:26:52 100 Critical Windows has started up
2016-11-01 19:55:21 100 Critical Windows has started up
2016-10-29 00:18:39 100 Critical Windows has started up
2016-10-26 23:16:55 100 Error Windows has started up
2016-10-26 14:51:07 100 Error Windows has started up
2016-10-26 02:24:01 100 Error Windows has started up
2016-10-26 02:18:24 100 Critical Windows has started up
2016-10-26 02:10:34 100 Error Windows has started up
2016-10-26 02:04:01 100 Critical Windows has started up
2016-10-25 14:23:12 100 Error Windows has started up
2016-10-25 13:07:47 100 Error Windows has started up
2016-10-25 12:56:23 100 Error Windows has started up
2016-10-19 13:16:39 100 Critical Windows has started up

示例输出: &001

我在PowerShell 5.1和Windows 10.0.15063上测试过。但是,只要你至少有PowerShell 3.0,它应该也能在Windows 7上运行。注意,你需要以管理员的身份运行它。

你可以在这里找到该命令的完整文档 docs.microsoft.com

2
2
2
2016-07-25 15:12:29 +0000

在任何版本的windows中,你都可以检查交换文件上的时间戳。

2
2
2
2015-07-08 20:41:51 +0000

在Windows 7上,我比较喜欢

net statistics workstation

WMIC不考虑睡眠时间,一周内我把工作站锁在工作中睡觉,准备第二天醒来。

2
2
2
2018-09-12 14:34:05 +0000

在PowerShell中获取:

Function Get-LastBoot {
        if ($Host.Version.Major -lt 3) {
            Get-WmiObject win32_operatingsystem | Select-Object CSname, @{n = 'LastBootUpTime'; e = {$_.ConverttoDateTime($_.lastbootuptime)}}
        }
        else {
            Get-CimInstance -ClassName win32_operatingsystem | Select-Object CSname, LastBootUpTime
        }
    }

结果如下:

CSname LastBootUpTime
------ --------------
LAPTOP1 2018-09-07 08:57:02
1
1
1
2018-08-17 11:38:18 +0000

我想补充的是,所有这些命令都会在 “重启 "或 "重启 "完成后给出时间戳。而不是当关机和启动完成后的时间。在关机和启动之后,"lastbootuptime "将反映系统真正 "重启 "的时间,而不是实际的启动时间。因此,关机/启动后的结果和从susbend/hybernnate回来的LastBootUpTime时间戳是一样的。

1
1
1
2018-05-23 16:10:40 +0000

有几个回答提到了net statistics workstation,我注意到:

net statistics server
net statistics workstation

net stats workstation | more

应该可以提供关于最后一次启动的数据。所以我会默认为Statistics since ...

同样,你也可以把一些命令缩写成1/1/1980 12:00这样的缩写,得到同样的结果。最后,如果你在系统间跳转,默认的CMD框不够大,无法显示所有命令的结果。所以我会把输出管到server**,避免向上滚动看开机时间。因此,我的默认命令是:

&001

1
1
1
2017-07-17 18:08:00 +0000

来自类似的ServerFault问题,搜索/过滤Windows系统事件日志中的Event ID 6009

在Windows 10上:Event Viewer > Windows Logs > System,然后是Filter Current Log...操作。

0
0
0
2019-02-21 16:36:38 +0000

和Max的回答一样…..

for /f %%a in ('WMIC OS GET lastbootuptime ^| find "."') DO set DTS=%%a
set BOOTTIME=%DTS:~0,4%-%DTS:~4,2%-%DTS:~6,2% %DTS:~8,2%:%DTS:~10,2%
echo DTS : %DTS%
echo BOOTTIME :%BOOTTIME%

…但是在oneliner中:

for /f %a in ('WMIC OS GET lastbootuptime ^| find "."') DO set DTS=%a && echo %DTS:~0,4%-%DTS:~4,2%-%DTS:~6,2% %DTS:~8,2%:%DTS:~10,2%

这个wmi的实现可能看起来有点乱,但是和其他的powershell或systeminfo实现相比,它的速度非常快,而且你可以很容易地改变格式,因为它在代码中是显式的。