어떻게 서버의 정상 운행 시간을 확정합니까?

질문:
안녕하세요, 스크립트 전문가!어떻게 서버의 정상 운행 시간을 확정합니까?
-- LF
답변:
안녕하세요, LF.이 문제는 매우 간단하다.어쨌든, 우리는 당신이 이야기하는 것이 Windows 서버이고 Windows 서버는 영원히 멈추지 않는다고 가정합니다. 그렇습니까?따라서 정상 운행 시간은 틀림없이 무한히 길다.문제가 해결되었다.
그러면 우리는 Windows 서버가 정지될 것이라고 가정한다. (어떤 비Windows 사용자가 몰래 잠입하여 전원 플러그나 다른 물건을 뽑았기 때문일 수도 있다.)Windows XP 또는 Windows Server 2003을 실행하는 컴퓨터의 시스템 작동 시간을 알고 싶으면 다음 스크립트를 사용하십시오.
strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery _
    ("Select * From Win32_PerfFormattedData_PerfOS_System")
 
For Each objOS in colOperatingSystems
    intSystemUptime = Int(objOS.SystemUpTime / 60)
    Wscript.Echo intSystemUptime & " minutes"
Next

보시다시피 WMI 서비스에 연결하고 ExecQuery 방법을 사용하여 Win32_ 검색PerfFormattedData_PerfOS_System 클래스의 모든 인스턴스입니다.(참고로 이 스크립트는 Windows XP 또는 Windows Server 2003에서만 실행되는 이유를 설명합니다. Windows의 두 버전에만 Win32_PerfFormattedData_PerfOS_System 클래스가 포함되어 있습니다.)
Win32_PerfFormattedData_PerfOS_시스템은 운영체제와 관련된 많은 성능 계수기를 포함하고 있으며, 시스템UpTime을 포함하여 시스템이 얼마나 오래 실행되었는지 표시할 수 있습니다.다음 행 코드를 사용하여 SystemUpTime 값을 60 (초 대신 정상 작동 시간 단위) 으로 나눈 다음 정수로 변환하여 소수점 이후의 모든 숫자를 제거합니다.
intSystemUptime = Int(objOS.SystemUpTime / 60)

그래, 그게 바로 한 줄의 코드가 해야 할 일이야. 정말 너무 많지 않아?그리고 변수 intSystemUptime의 값을 표시하면 됩니다.
자, Windows 2000을 실행하지 않으면 문제가 해결됩니다.앞에서 말한 바와 같이 상기 스크립트는 Windows 2000에서 실행할 수 없으며, Windows 2000은 심지어 Win32_를 들어 본 적이 없다PerfFormattedData_PerfOS_System 클래스.다행히도 해결 방법이 존재한다.비록 약간 서투르지만, 어쨌든 일종의 해결 방법이다.
strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery _
    ("Select * from Win32_OperatingSystem")
 
For Each objOS in colOperatingSystems
    dtmBootup = objOS.LastBootUpTime
    dtmLastBootupTime = WMIDateStringToDate(dtmBootup)
    dtmSystemUptime = DateDiff("n", dtmLastBootUpTime, Now)
    Wscript.Echo dtmSystemUptime & " minutes"
Next
 
Function WMIDateStringToDate(dtmBootup)
    WMIDateStringToDate = CDate(Mid(dtmBootup, 5, 2) & "/" & _
        Mid(dtmBootup, 7, 2) & "/" & Left(dtmBootup, 4) _
            & " " & Mid (dtmBootup, 9, 2) & ":" & _
                Mid(dtmBootup, 11, 2) & ":" & Mid(dtmBootup,13, 2))
End Function

이 스크립트에서 WMI 서비스에 연결하고 Win32_ 조회Operating System 클래스;그건 Win32 때문이에요 _Operating System에는 컴퓨터가 마지막으로 시작된 시간을 알려주는 LastBootUpTime 속성이 포함되어 있습니다.이 점은 매우 유용하다. 만약에 우리가 현재 시간에서 LastBoot UpTime을 빼면, 우리는 컴퓨터가 얼마나 오래 실행되었는지 알게 될 것이다.
유일하게 까다로운 부분은 모든 WMI 날짜와 시간과 마찬가지로 LastBootUpTime이 UTC(공통 시간 좌표) 형식으로 저장된다는 것이다.그러면 다음과 같은 값이 반환됩니다.
20050726071152.500000-420

시도하기 전에 현재 날짜와 시간에서 이 값을 빼는 데 신경 쓰지 마십시오.그렇게 하는 것은 헛수고다.우리는 이 값을 실제 날짜와 시간처럼 보이는 형식으로 변환해야 한다.이것이 바로 우리가 작성한 함수를 호출하는 이유입니다. 이 함수는 UTC datetime 값을 일반적인 구식 날짜/시간 값으로 변환할 수 있습니다.
dtmLastBootupTime = WMIDateStringToDate(dtmBootup)

주의하다.우리는 이 함수의 작업 방식에 대해 소개하지 않을 것이다.자세한 내용은 Microsoft Windows 2000 Scripting Guide(영어)를 참조하십시오이 부분 .
변환이 완료되면 DateDiff 함수를 사용하여 마지막 시작 시간을 현재 시간에서 줄입니다.
dtmSystemUptime = DateDiff("n", dtmLastBootUpTime, Now)

보시다시피 DateDiff에 세 가지 매개변수를 전달합니다.

"n"은 시간 차이를 분 단위로 보고합니다.

변환된 datetime 값을 저장하는 데 사용되는 변수입니다.

Now, 현재 날짜 및 시간.
우리가 다음에 해야 할 일은 시스템의 정상 운행 시간을 분 단위로 표시하는 것이다.
앞에서 설명한 바와 같이 Windows 컴퓨터에 왜 이런 스크립트를 사용해야 하는지 상상할 수 없습니다. 만약을 대비해서...

좋은 웹페이지 즐겨찾기