另一个方法是使用下面的命令行,在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 关于确定系统正常运行时间的准确性。
这就是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"。你必须使用CSName
或PSComputerName
,这似乎对我来说是可行的。
对于在外的Windows 10用户来说…..
请注意,正如 Alex 所指出的,/sleepstudy
命令是在 Windows 8.1 之前才加入的。请注意/systempowerreport可能会起作用。
请注意,其他一些答案对我来说从来没有起作用,比如搜索事件日志总是缺少一些条目。@Florisz的答案在这方面也是正确的。下面是我的解决方法:
在管理员cmd shell中,运行以下命令:
powercfg /sleepstudy /output sleepstudy.html
然后在浏览器中打开文件sleepstudy.html
。你将会看到**过去三天来的关机/重启/待机/休眠的统计数据。(所以,如果你需要的话,可以定期运行)
一个输出的例子。(AFAIR, Showdown (Hybrid)
表示快速启动)
另一种在批处理文件中获取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
你可以使用PowerShell来实现。
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 ”`
下面的命令将给你一个记录的启动时间列表。
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
在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
有几个回答提到了net statistics workstation
,我注意到:
net statistics server
net statistics workstation
和
net stats workstation | more
应该可以提供关于最后一次启动的数据。所以我会默认为Statistics since ...
。
同样,你也可以把一些命令缩写成1/1/1980 12:00
这样的缩写,得到同样的结果。最后,如果你在系统间跳转,默认的CMD框不够大,无法显示所有命令的结果。所以我会把输出管到server
**,避免向上滚动看开机时间。因此,我的默认命令是:
&001
来自类似的ServerFault问题,搜索/过滤Windows系统事件日志中的Event ID 6009
。
在Windows 10上:Event Viewer > Windows Logs > System
,然后是Filter Current Log...
操作。
和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实现相比,它的速度非常快,而且你可以很容易地改变格式,因为它在代码中是显式的。