Windows 10 開機時間和運行時間:PowerShell 洞察

Windows 的正常運行時間是許多伺服器管理員用來解決日常問題的一個度量指標。在這篇文章中,您將學習如何在 Windows 10 和 Windows Server 中檢查開機時間。您可以使用最方便的方法。請將這篇文章作為以後的參考。

這篇文章將分為兩個主要部分:檢查伺服器正常運行時間和查找歷史 Windows 正常運行時間。第一部分將重點介紹如何查找自上次重啟以來電腦運行的時間。本篇文章稱之為「當前」正常運行時間。

第二部分將重點介紹如何找到「歷史」正常運行時間,即在多次重啟之間 Windows 系統運行的時間。使用 PowerShell,您將學習如何解析 Windows 事件日誌以獲取歷史正常運行時間。

如何在 Windows 10 和 Windows Server 中檢查開機時間

為了開始,現在讓我們來看幾種不同的方法來查找當前的 Windows 正常運行時間。

通過本節在 Windows 10 上運行本地命令的示範,您將看到如何檢查開機時間。但請知道,通過使用 PowerShell 遠程管理,您也可以遠程執行這些檢查(不包括任務管理器)。

任務管理器

找到正常運行時間最簡單直接的方法之一就是打開任務管理器。

要使用任务管理器检查Windows的运行时间,右键单击Windows任务栏,然后选择任务管理器或按Ctrl + Shift + Esc。打开任务管理器后,点击性能选项卡。在性能选项卡下,您将看到一个标签为运行时间的项目。

Finding Windows uptime with task manager

事件查看器

事件查看器是大多数系统管理员经常使用的工具,是一种非命令行的检索运行时间的好方法。事件ID 6005和6006可用于识别事件日志服务启动或停止的时间,这通常发生在启动或关闭系统时。按照以下步骤通过事件查看器来识别运行时间:

  • 打开开始菜单,搜索事件查看器,您也可以通过计算机管理找到它。
  • 在左侧展开Windows日志部分,选择系统
  • 现在我们只查询与系统相关的事件,点击窗口右侧的“筛选当前日志…”
  • 在事件ID字段中(默认情况下这个字段将自动填写为“所有事件ID”),我们需要搜索适用的事件ID,输入“6005, 6006”,然后点击确定

您可以比较这两个时间来计算总的运行时间。另外,由于这些事件的许多实例被存储,我们可以查询历史运行时间!

现在,您已经筛选出了事件日志,它将显示最近的启动/关闭时间以及所有已知的启动/关闭时间。

PowerShell

PowerShell有幾種不同的方式可以獲取運行時間。您可以查詢WMI或使用Windows事件日誌。

當查詢WMI時,您可以查詢Win32_OperatingSystem類別並選擇LastBootUpTime屬性,如下所示。

PS51> Get-CimInstance Win32_OperatingSystem | Select-Object LastBootUpTime

LastBootUpTime      
--------------      
9/25/2019 9:37:37 PM

要通過PowerShell查詢事件日誌,請使用Get-WinEvent命令。您需要搜索事件ID為6005或6006,這些事件ID指示了計算機上次啟動的時間。

PS51> Get-WinEvent -ProviderName EventLog | Where-Object {$_.Id -eq 6005 -or $_.Id -eq 6006} | Select-Object -First 1 TimeCreated

TimeCreated         
-----------         
9/25/2019 9:37:52 PM

WMIC

WMIC提供了用於WMI的命令行界面,是一種經過多年使用的可靠方法。要通過WMIC查詢運行時間,您再次查詢Win32_OperatingSystem WMI類別,只是在一個稍微隱藏的位置。如下所示,您可以使用WMIC語法os get lastbootuptime返回服務器上次啟動的時間。

> wmic os get lastbootuptime

LastBootUpTime             

20190925213737.500000-240

您無需下載任何東西即可使用WMIC,因為它預先安裝在Windows中。

系統信息工具

systeminfo命令顯示關於計算機的詳細配置信息,可用於查詢系統運行時間。通過使用內置的find命令行工具,您可以解析文本以檢索所需的數據。

只需打開命令提示符或PowerShell,然後輸入systeminfo | find

> systeminfo | find "System Boot Time:"

System Boot Time:          9/25/2019, 9:37:37 PM

您不需要下載任何東西來使用systeminfo,因為它已預先安裝在Windows中。

Net Statistics命令

您還可以通過Net Statistics或更常用的net stats快速查詢正常運行時間。 net stats命令返回有關您的會話的一般信息。您可以在以下的Statistics since…行中看到。此日期表示機器啟動的時間。

> net stats srv

Workstation Statistics for \\NATES-PC


Statistics since 9/25/2019 9:37:52 PM

--SNIP--

The command completed successfully.

正常運行時間命令

如果您需要一個小型、便攜的實用程序來查找Windows的正常運行時間,那就不要錯過NeoSmart Technologies的Windows正常運行時間命令。這個工具非常適合快速查詢任何Windows版本的正常運行時間。此工具的主要優點是方便性。如果您每天使用多次,您可能需要考慮使用此方法。

下載完工具後,將uptime.exe提取到%WinDir%\System32中。然後打開命令提示符,只需輸入uptime即可。

Uptime tool

要遠程運行此工具,您首先需要將該工具複製到要檢查正常運行時間的Windows系統中。

介紹Get-ServerUptimeReport腳本

所以您不需要自己編寫PowerShell,可以下載一個名為Get-ServerUptimeReport.ps1的社區腳本。

PS51> Install-Script -Name Get-ServerUptimeReport

此腳本允許您以參數形式提供計算機名稱。然後,它會解析計算機的系統事件日誌,找到開始和停止事件並進行比較。然後,它將返回服務器上線的總時間,直到事件日誌滾動為止。

以下是在服務器上使用此腳本的示例。它將返回事件日誌中服務器的所有事件的總正常運行時間,包括當前的正常運行時間。

PS51> ./Get-ServerUptimeReport.ps1 -ComputerName sqlsrv1

Startup Shutdown Uptime (Days) Uptime (Min)
------- -------- ------------- ------------
9/16/2017 12:40:00 PM 9/22/2017 4:20:11 PM 6.15 8860.18
9/16/2017 10:22:49 AM 9/16/2017 12:22:36 PM 0.08 119.79
9/16/2017 3:22:12 PM 9/22/2017 4:20:11 PM 6.04 8697.98

在多個服務器中查找Windows正常運行時間

此腳本是查找單個服務器在多天中正常運行時間的快速方法。但是,如果您需要同時獲取多個服務器的此信息怎麼辦?為此,您可以收集一個服務器列表,然後依次將每個計算機名稱傳遞給此腳本。

例如,在PowerShell控制台中定義所有服務器的數組。在此示例中,變量數組將被稱為$servers

實際上,您可能從Active Directory、Hyper-V或文本文件中提取服務器名稱。只要能夠構建一個服務器名稱數組,您就可以正常運行。

定義所有服務器名稱,然後使用循環遍歷每個名稱,如下所示。

$servers = 'WEBSRV1','SQLSRV1'
foreach ($server in $servers) {
	Get-ServerUptimeReport.ps1 -ComputerName $server
}

Startup Shutdown Uptime (Days) Uptime (Min)
------- -------- ------------- ------------
9/16/2017 12:45:48 PM 9/22/2017 4:25:39 PM 6.15 8859.86
9/16/2017 10:42:52 AM 9/16/2017 12:42:34 PM 0.08 119.7
9/16/2017 2:42:17 PM 9/22/2017 4:25:39 PM 6.07 8743.38
9/16/2017 12:40:00 PM 9/22/2017 4:25:39 PM 6.16 8865.65
9/16/2017 10:22:49 AM 9/16/2017 12:22:36 PM 0.08 119.79
9/16/2017 3:22:12 PM 9/22/2017 4:25:39 PM 6.04 8703.46

此代碼有效,但無法確定每行引用的是哪個服務器。使用計算屬性像下面這樣添加服務器名稱到輸出中。

$servers = 'WEBSRV1','SQLSRV1'
foreach ($server in $servers) {
	Get-ServerUptimeReport.ps1 -ComputerName $server | Select-Object -Property *,@{n='ServerName';e={$server}}
}

Startup Shutdown Uptime (Days) Uptime (Min) ServerName
------- -------- ------------- ------------ ----------
9/16/2017 12:45:48 PM 9/22/2017 4:34:59 PM 6.16 8869.19 WEBSRV1
9/16/2017 10:42:52 AM 9/16/2017 12:42:34 PM 0.08 119.7 WEBSRV1
9/16/2017 2:42:17 PM 9/22/2017 4:34:59 PM 6.08 8752.71 WEBSRV1

Startup Shutdown Uptime (Days) Uptime (Min) ServerName
------- -------- ------------- ------------ ----------
9/16/2017 12:40:00 PM 9/22/2017 4:35:01 PM 6.16 8875.01 SQLSRV1
9/16/2017 10:22:49 AM 9/16/2017 12:22:36 PM 0.08 119.79 SQLSRV1
9/16/2017 3:22:12 PM 9/22/2017 4:35:01 PM 6.05 8712.81 SQLSRV1

現在,我們有了一個很好的小工具,可以為我們的服務器提供關於正常運行時間的快速報告!

摘要

你現在已經看到了許多不同的方法來查找Windows運行時間。無論你選擇哪個選項,你都會得到相同的信息。根據自己的情境選擇最好的選項。

而且請記住,如果你需要運行時間歷史報告,不要忘記使用Get-ServerUptimeReport PowerShell腳本!

Source:
https://adamtheautomator.com/windows-uptime/