본문 바로가기

OS/Windows

Windows - PC 부팅 일자 확인 및 자동 종료 설정하기 (batch 이용)

728x90

PC가 장기간 켜져 있는 경우, 성능 저하 또는 보안 취약점이 생길 수 있습니다.

Active Directory(AD)를 사용하는 조직에서는 스크립트와 그룹 정책을 활용해 장기간 켜져 있는 PC를 자동으로 모니터링하고 30일 이상 켜진 PC에 경고 메시지를 표시해 종료를 권장할 수 있습니다.

이번 포스팅에서는 Batch Script로 PC 부팅 후 경과 일수를 계산하고, 경고 메시지를 표시하는 방법을 소개하겠습니다.


주요 기능

  • PC 부팅 후 경과 일수 계산: net statistics workstation 명령으로 부팅 날짜와 현재 날짜를 비교하여 경과 일수를 계산합니다.
  • 30일 이상 경과 시 알림 표시: msg 명령어를 사용해 간결한 팝업 알림을 띄우고, 추가 내용은 CMD 창에서 상세히 출력합니다.
  • 그룹 정책을 통한 배포: AD 환경에서 그룹 정책(GPO)을 통해 이 스크립트를 모든 PC에 자동 배포하고, 주기적으로 실행되도록 설정할 수 있습니다.

Batch Script 코드

@echo off
chcp 437 >nul
setlocal enabledelayedexpansion

REM 1. 현재 날짜 가져오기
FOR /F "tokens=1-3 delims=- " %%a IN ('date /t') DO (
    set A=%%a
    set B=%%b
    set C=%%c
)

REM 2. PC 부팅 날짜 가져오기
for /F "tokens=3-5 delims=- " %%d in ('net statistics workstation ^| findstr /i "since"') do (
    set D=%%d
    set E=%%e
    set F=%%f
)

REM 3. 월, 일 앞에 0이 붙어있으면 제거하기
if "%B:~0,1%"=="0" set B=%B:~1%
if "%C:~0,1%"=="0" set C=%C:~1%
if "%E:~0,1%"=="0" set E=%E:~1%
if "%F:~0,1%"=="0" set F=%F:~1%

REM 4. 연도 차이만큼 월수 계산
set /A month_diff=(A-D)*12

REM 5. 월 차이만큼 일수 계산
set /A diff=B-E
if %diff% GTR 0 (
    set /A day_diff=diff*30
) else (
    set /A day_diff=0
)

REM 6. 최종 일수 차이 계산
set /A G=(month_diff+day_diff)+C-F

REM 7. PC가 30일 이상 켜져 있으면 경고 메시지 출력
if %G% GEQ 30 (
    msg * "Reminder: Your PC has been on for over 30 days. Please shut down soon."
    echo *****************************************
    echo *                                       *
    echo *  ALERT: PC has been running 30+ days  *
    echo *  To improve performance and security, *
    echo *  please shut down your PC soon.       *
    echo *                                       *
    echo *****************************************
    timeout /t 10
)

endlocal

 

코드 설명

  1. 현재 날짜 및 부팅 날짜 추출
    • date /t와 net statistics workstation 명령을 통해 현재 날짜와 PC 부팅 날짜를 가져옵니다.
    • 각각의 연도, 월, 일 값을 변수로 저장해 계산에 활용합니다.
  2. 날짜 값 조정
    • 월과 일 값 앞에 붙은 ‘0’을 제거하여 오류 없이 날짜 계산을 할 수 있도록 합니다.
  3. 경과 일수 계산
    • 연도 차이를 12개월 단위로 환산하여 month_diff로 계산한 후, 월 차이를 일수로 환산하여 day_diff에 저장합니다.
    • 최종 경과 일수를 G로 계산하여 30일 이상 켜져 있는지 여부를 확인합니다.
  4. 경고 메시지 표시
    • PC가 30일 이상 켜져 있으면 msg 명령어로 사용자에게 팝업 메시지를 띄워 종료를 권장합니다.
    • 추가적인 경고 메시지를 CMD 창에 표시해 경과 일수와 종료 권장 메시지를 제공합니다.
      CMD 창은 timeout /t 10으로 10초간 유지됩니다. (타임아웃 시간도 상황에 맞게 조절해 사용)
  5. 필요시 자동 종료되도록 스크립트를 수정해서 사용하여도 됩니다. (REM 7 이후)

그룹 정책(GPO)으로 배치 스크립트 배포하기

AD 환경에서는 그룹 정책을 통해 이 스크립트를 도메인 내 모든 PC에 자동으로 배포할 수 있습니다. 이렇게 설정하면, 장시간 켜져 있는 PC에 자동으로 경고 메시지가 표시되도록 설정할 수 있습니다.

  1. 그룹 정책 관리 도구(GPMC) 실행
    • 도메인 컨트롤러에서 GPMC.msc를 실행해 그룹 정책 관리 도구를 엽니다.
  2. 새 GPO 생성
    • 도메인 또는 특정 조직 단위(OU)에 새 GPO를 생성하고, "PC 부팅 시간 모니터링"과 같은 이름을 지정합니다.
  3. 예약된 작업 추가
    • 컴퓨터 구성 > 기본 설정 > 제어판 설정 > 예약된 작업으로 이동합니다.
    • 새 작업을 추가하여 이 스크립트를 지정한 시간에 매일 실행되도록 설정합니다. 스크립트 경로는 네트워크 경로를 사용해 \\ServerName\Scripts\PCBootMonitor.bat와 같은 UNC 경로로 지정할 수 있습니다.

이 설정을 통해 도메인에 연결된 모든 PC가 매일 지정된 시간에 스크립트를 실행하고, 장시간 켜져 있는 PC에 경고 메시지를 표시하게 됩니다. 이를 통해 IT 관리자가 PC를 주기적으로 종료하도록 유도할 수 있어, 조직 전체의 성능 및 보안성을 높이는 데 큰 도움이 됩니다.

728x90
반응형