느리지만 단단한 IT 인프라 이야기

Script/PowerShell

[PowerShell] 내부망 시간 동기화

바둑이 아저씨 2025. 6. 10. 11:15

powersehell

업무 중 로그 시간이나 인증 서버 시간과 시스템 시간이 어긋나서 고생해본 경험 있으신가요?

특히 사내 인트라넷이나 폐쇄망 환경에서 NTP 서버 연결이 어려운 경우엔, 자체 시간 동기화 시스템을 구성해주는 것이 안정적인 운영에 큰 도움이 됩니다.

이번 글에서는 PowerShell을 활용해 내부에 있는 공인망이 연결된 서버로부터 시간 정보를 받아와 시스템 시간을 자동으로 동기화하고, 이 작업을 Windows 시작 시 자동으로 실행되도록 등록하는 방법을 소개합니다.



동기화 작업을 진행하기 전에 , ISO 8601 표준을 만족한 현재 시간을 출력하는 웹 서버 구성이 필요 합니다.

해당 내용은 아래의 자료를 참고 부탁드립니다.

 

[JSP] 현재 시간 반환하기 (ISO 8601)

아래의 코드는 JSP를 사용하여 서버의 현재 시간을 ISO 8601 형식으로 포맷하고, 이를 JSON 형태로 반환하는 간단한 예제입니다. API 응답이나 클라이언트-서버 시간 동기 테스트 등에 활용할 수 있습

turtlified.com


1. 시간 동기화 ps ( TimeSync.ps1 )

try {
    $url = "http://ServerIP:8080/asp/TimeSync.jsp"
    $response = Invoke-RestMethod -Uri $url
    $datetime = Get-Date $response.serverTime

    Set-Date -Date $datetime

    Write-EventLog -LogName Application -Source "TimeSyncScript" -EntryType Information -EventId 1000 -Message "Time synchronized to $datetime"
} catch {
    Write-EventLog -LogName Application -Source "TimeSyncScript" -EntryType Error -EventId 1001 -Message "Time sync failed: $_"
}

 

  • http://ServerIP:8080/asp/TimeSync.jsp는 시간 정보를 응답하는 내부 서버 URL입니다.
  • 서버에서 내려주는 serverTime 값을 현재 시간으로 설정합니다.
  • 이벤트 로그에도 성공/실패 여부를 기록하여 추적 가능합니다.

2. 시작 프로그램에 ps 등록하기 ( register.ps1 )

$taskName = "TimeSyncAtStartup"
$scriptPath = "C:\TimeSync.ps1"

# 기존 작업이 있다면 삭제
if (Get-ScheduledTask -TaskName $taskName -ErrorAction SilentlyContinue) {
    Unregister-ScheduledTask -TaskName $taskName -Confirm:$false
}

$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-ExecutionPolicy Bypass -File `"$scriptPath`""
$trigger = New-ScheduledTaskTrigger -AtStartup
$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -RunLevel Highest

Register-ScheduledTask -TaskName $taskName -Action $action -Trigger $trigger -Principal $principal

Write-Host "✅ '$taskName' The task has been registered. Time synchronization will be performed automatically when the system starts."

 

3. 적용하기 

 PC 재부팅을 진행하거나 최초 1회 등록 스크립트 실행을 하면 바로 적용할 수 있습니다.

powershell.exe -ExecutionPolicy Bypass -File "C:\register.ps1"

관리자 권한 PowerShell로 실행해야 정상 등록됩니다.


운영 중인 인트라넷 환경이나 보안 서버에 간단히 적용해 시간을 동기화 해보시기 바랍니다.

필요에 따라 서버 측 TimeSync.jsp에 인증 기능이나 접근 제어를 추가하면 더 안정적인 운용도 가능합니다.

궁금한 점이나 개선 아이디어가 있다면 댓글로 남겨주세요! 😊

감사합니다.