Windows 10 부팅 시간 및 가동 시간: PowerShell 통찰력

Windows 운영 시간은 많은 서버 관리자들이 환경에서 발생할 수 있는 일상적인 문제를 해결하기 위해 사용하는 측정 방법입니다. 이 문서에서는 Windows 10 및 Windows Server에서 부팅 시간을 확인하는 방법을 배우게 될 것입니다. 가장 편한 방법을 자유롭게 사용하실 수 있습니다. 이 문서를 참고 자료로 사용하십시오.

이 문서는 두 가지 주요 부분으로 나누어질 것입니다. 첫 번째 부분은 서버 운영 시간을 확인하고 Windows 운영 시간을 찾는 것에 초점을 맞출 것입니다. 이는 이 문서에서 “현재” 운영 시간이라고 불리게 됩니다.

두 번째 부분은 PowerShell을 사용하여 Windows 이벤트 로그를 구문 분석하여 여러 번의 재부팅 사이에서 Windows 시스템이 얼마 동안 작동되었는지 확인하는 “과거” 운영 시간을 찾는 것에 초점을 맞출 것입니다.

Windows 10 및 Windows Server에서 부팅 시간을 확인하는 방법

시작하기 위해, 현재의 Windows 운영 시간을 찾는 몇 가지 다른 방법에 대해 알아보겠습니다.

이 섹션에서는 Windows 시스템에서 로컬로 명령을 실행하여 Windows 10에서 부팅 시간을 확인하는 방법에 대한 데모를 보게 될 것입니다. 그러나 PowerShell 원격을 사용하여 원격으로 이러한 확인 작업을 수행할 수도 있습니다(작업 관리자는 제외됩니다).

작업 관리자

운영 시간을 찾는 가장 간단하고 직접적인 방법 중 하나는 작업 관리자를 열어보는 것입니다.

작업 관리자를 사용하여 Windows 운영 시간을 확인하려면 Windows 작업 표시줄을 마우스 오른쪽 버튼으로 클릭하고 작업 관리자를 선택하거나 CtrlShiftEsc를 누릅니다. 작업 관리자가 열리면 성능 탭을 클릭합니다. 성능 탭에서 작동 시간 레이블을 볼 수 있습니다.

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 cmdlet을 사용하면 됩니다. 기계가 시작된 마지막 시간을 나타내는 이벤트 ID 6005 또는 6006을 검색해야 합니다.

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 stats로 알려져 있는 Net Statistics를 통해 빠르게 업타임을 조회할 수도 있습니다. 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.

Uptime 명령어

Windows의 업타임을 찾기 위한 작고 휴대 가능한 유틸리티가 필요하다면 NeoSmart Technologies의 Uptime command for 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의 가동 시간을 찾는 방법을 보았습니다. 어떤 옵션을 선택하든 동일한 정보를 받게 될 것입니다. 자신의 상황에 가장 적합한 방법을 선택하세요.

그리고 만약 가동 시간 기록의 역사적인 보고서가 필요하다면, PowerShell 스크립트인 Get-ServerUptimeReport를 잊지 마세요!

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