您希望获得一个开箱即用的解决方案,以便在上次混合关闭/快速启动发生后查找机器的正常运行时间,对吗?
您可以使用PowerShell从EventLog获取此信息(由@allquixotic提供),如下所示:
PS c:\> Write-Host $("{0:c}" -f ((Get-Date)- (Get-EventLog -LogName system -Source "Microsoft-Windows-Power-Troubleshooter" -Newest 1).TimeGenerated))
要将powershell命令嵌入到Windows shell脚本中,您可以执行以下操作:
c:\> powershell.exe -nologo -command Write-Host $('Time since last ''Fast Startup'': {0:c}' -f ((Get-Date)- (Get-EventLog -LogName system -Source \"Microsoft-Windows-Power-Troubleshooter\" -Newest 1).TimeGenerated))
Howerver,为了让这个开箱即用,您可以将其设置为这样的永久环境变量:
c:\> setx HardwareUptime "powershell.exe -nologo -command Write-Host $('Uptime since last ''Fast Startup'': {0:c}' -f ((Get-Date)- (Get-EventLog -LogName system -Source 'Microsoft-Windows-Power-Troubleshooter' -Newest 1).TimeGenerated))"
所以,你可以通过打开一个cmd
窗口并执行以下操作来使其工作:
c:\> %HardwareUpTime%
更新:
我今天刚刚发现在事件日志中使用上面的条目也会考虑“睡眠”或暂停模式,因此运行%HardwareUpTime%
会告诉你自从PC恢复睡眠以来已经过的时间。
因此,这里是:
setx HardwareUptime "powershell.exe -nologo -command Write-Host $('Uptime since hardware boot: {0:c}' -f ((Get-Date)- (Get-EventLog -LogName system -InstanceId 27 -Newest 1).TimeGenerated)); Write-Host $('Uptime since system resumed: {0:c}' -f ((Get-Date)- (Get-EventLog -LogName system -Source 'Microsoft-Windows-Power-Troubleshooter' -Newest 1).TimeGenerated));"
我已经修改了一些命令以使其更加明确,并为您提供两条信息:
注意:如果系统之间没有睡眠,则两次都是相同的。