작업 스케줄러에서 PowerShell 스크립트를 실행하는 방법
Aug 26, 2025
Windows 작업 스케줄러를 사용하면 관리자가 지정된 일정에 따라 또는 시스템 이벤트에 대응하여 PowerShell 스크립트를 자동으로 실행할 수 있습니다. 이는 백업, 업데이트, 모니터링, 정리 작업과 같은 업무에서 일관성을 높이고 시간을 절약하며 사람이 저지를 수 있는 실수를 줄여줍니다. 스크립트는 GUI 또는 PowerShell cmdlet(Register-ScheduledTask, New-ScheduledTaskTrigger, 등)을 통해 예약할 수 있습니다. 모범 사례에는 최소 권한 계정 사용, 로깅 및 오류 처리, 스크립트 서명, 오용을 방지하기 위한 정기적인 검토가 포함됩니다.
소개
Windows 작업 스케줄러를 사용하면 특정 날짜와 시간에 실행되도록 작업을 예약하거나, 정해진 일정에 따라 실행하거나, 특정 이벤트가 발생하면 트리거되어 실행되도록 설정할 수 있습니다. Windows 운영 체제에 내장된 이 도구는 효율성을 높이고 반복 작업을 안정적으로 실행하는 데 도움이 됩니다. 이 블로그에서는 작업 스케줄러에서 PowerShell 스크립트를 실행하는 방법 과 PowerShell을 사용해 예약 작업을 생성하는 방법을 보여드리겠습니다.
자동화를 위한 PowerShell 스크립트 설정
작업 스케줄러 이해하기
작업 스케줄러 라이브러리는 정의된 모든 작업을 폴더로 정리해 모아둔 컬렉션입니다. 각 작업에 대해 GUI에서는 다음 탭을 제공합니다.
- 일반 — 작업의 이름과 설명, 실행되어야 하는 계정, 그리고 기타 보안 옵션.
- 트리거 — 작업을 시작하는 조건으로, 시간 기반(예: 매일, 매주), 이벤트 기반(예: 시스템 시작 또는 사용자 로그인 시) 또는 사용자 지정일 수 있습니다.
- 작업 — 작업이 트리거될 때 수행되는 작업(예: 프로그램 시작).
- 조건 — 컴퓨터의 상태에 따라 작업 실행을 제어하는 기준입니다. 예를 들어, 특정 기간 동안 컴퓨터가 유휴 상태일 때만 실행합니다.
- 설정 — 작업을 실행하는 방식과 시점을 결정하는 추가 구성입니다. 예를 들어 작업이 실패하면 다시 시작하거나, 예상보다 오래 실행되면 중지합니다.
- 히스토리 — 시작 시간, 종료 시간, 그리고 실행 중에 발생한 오류 또는 경고를 포함한 작업 실행 기록
PowerShell 스크립트를 자동화하기 위해 작업 스케줄러를 사용하는 이점
PowerShell 작업 스케줄러를 통해 PowerShell 스크립트를 자동화하면 다음을 포함해 여러 가지 이점이 있습니다:
- 시간 절약 — 작업 스케줄러에서 PowerShell 스크립트를 실행하면, 그렇지 않으면 수동 실행에 소요될 상당한 시간을 절약할 수 있습니다. 이는 야간 등 근무 외 시간에 실행해야 하는 스크립트에 특히 유용합니다.
- 일관성 — 자동화는 사람의 실수로 인한 위험을 줄입니다. 예약된 PowerShell 스크립트는 매번 동일한 작업을 동일한 순서로 정확히 실행합니다.
- 신뢰성 — 작업 스케줄러(Task Scheduler)를 사용하면 백업 및 정리(클린업) 루틴과 같은 중요 유지 관리 작업이 정기적으로 실행되도록 보장할 수 있습니다. 이는 시스템의 신뢰성을 높이고 데이터 손실이나 시스템 장애의 위험을 줄여줍니다.
- 자원 효율성 — 시스템 활용률이 낮은 시간대에 스크립트를 실행하도록 예약하면, 집중적인 작업이 피크 시간대에 시스템 성능을 저하시키는 것을 방지할 수 있습니다.
- 유연성 — 작업 스케줄러(Task Scheduler)는 시스템 시작 시, 로그온 시, 유휴 상태일 때, 또는 특정 이벤트에 대응해 작업을 실행하는 기능을 포함하여 다양한 스케줄링 옵션을 제공합니다. 이러한 제어 수준을 통해 스크립트 실행을 사용자의 구체적인 요구 사항에 맞게 조정할 수 있습니다.
- 오류 처리 — 스크립트가 실패하면 재실행을 시도하도록 예약 작업을 구성하고, 작업 완료 또는 실패 시 이메일을 전송하며, 이벤트 로그를 기록하도록 설정할 수 있습니다. 이를 통해 신속한 문제 해결이 가능해지고 자동화 프로세스의 상태를 계속 파악할 수 있습니다.
- 보안 — 작업 스케줄러(Task Scheduler)를 사용하면 PowerShell 스크립트를 사용자가 로그온하지 않아도 특정 사용자 계정(고정 권한이 있는 계정 포함)에서 실행할 수 있습니다. 이는 민감한 작업이 안전하게 실행되도록 돕고, 더 높은 권한이 필요한 스크립트의 자동화를 가능하게 합니다. 하지만 공격자는 악의적인 목적을 위해 예약 및 트리거된 작업을 악용할 수 있으므로, 잠재적 남용 여부를 확인하기 위해 감사(auditing) 또는 추적(tracking) 시스템을 활용해 작업을 모니터링해야 합니다. Netwrix Access Analyzer 는 악의적인 활동을 완화하는 데 도움이 될 수 있는 도구의 좋은 예입니다.
- 통합 및 확장성 — PowerShell 스크립트를 스케줄링하면 시스템 이벤트에 대응하고 여러 작업을 오케스트레이션하는 등 보다 정교한 자동화 시나리오를 구현할 수 있습니다.
- 복잡한 워크플로의 관리 — 작업 스케줄러(Task Scheduler)는 작업을 연쇄로 연결하거나, 이전 작업의 성공/실패 여부에 따라 조건 논리를 사용하는 등 복잡한 워크플로를 관리할 수 있습니다. 여러 상호 의존적인 작업을 신중하게 오케스트레이션해야 하는 시나리오에서 이는 매우 유용합니다.
- 사용 편의성 — 강력한 기능에도 불구하고 작업 스케줄러(Task Scheduler)는 직관적인 그래픽 인터페이스를 제공하여 자동화된 작업을 설정하고 관리하는 과정을 간소화합니다. 보다 고급 사용자의 경우, 작업 스케줄러는 명령줄 도구나 PowerShell cmdlets를 사용해 구성 및 관리할 수도 있습니다.
PowerShell 스크립트에 대한 스케줄을 만드는 단계
작업 스케줄러(Task Scheduler)로 PowerShell 스크립트를 스케줄링하기 전에, 스크립트가 .ps1 확장자로 저장되어 있는지 확인하고, 올바르게 작동하는지 테스트했는지 확인하세요.
그런 다음 다음 단계를 수행하세요:
- 작업 스케줄러 열기: Win + R를 누른 다음 taskschd.msc를 실행 대화상자에 입력하고 Enter를 누르세요.
- 오른쪽의 작업 창에서 작업 만들기를 클릭하세요.
- 일반 탭에서 다음을 수행하세요:
- 작업의 이름과 설명을 입력하세요.
- 적절한 보안 옵션을 구성하세요. 예를 들어, 사용자가 로그인했는지 여부와 관계없이 실행을 선택하면 로그인하지 않은 경우에도 작업이 실행됩니다. 스크립트에 관리자 권한이 필요한 경우 최고 권한으로 실행을 확인하세요.
변경 사항을 저장하려면 확인을 클릭하세요.
- 트리거 탭으로 이동한 다음 새로 만들기를 클릭하세요. 새 트리거 창에서 다음을 선택합니다.
- 작업을 시작할 시점
- 한 번, 매일 또는 매주와 같이 실행 빈도
- 지정한 시간보다 작업이 더 오래 실행되면 작업을 중지하는 등, 필요에 따라 추가 옵션을 설정합니다.
OK를 클릭하여 변경 사항을 저장합니다.
- Actions 탭으로 이동한 다음 New를 클릭하여 PowerShell 스크립트를 실행할 새 작업을 설정합니다.
- Action 드롭다운 메뉴에서 Start a program을 선택합니다.
- Program/script 필드에, powershell.exe를 입력합니다.
- 인수 추가 필드에 다음을 입력하되 스크립트의 전체 경로를 지정해야 합니다: -File C:\Scripts\scriptname.ps1
- 시작 위치 필드에서(필요한 경우) 스크립트가 실행될 디렉터리를 지정합니다. 스크립트가 상대 경로에 의존하지 않는 한 보통 이 설정은 필요하지 않습니다.
OK 를 클릭하여 변경 사항을 저장합니다
- OK 을 클릭한 다음 조건 탭으로 이동합니다. 작업이 실행되어야 하는 조건을 지정합니다. 예를 들어, 컴퓨터가 AC 전원에 연결되어 있을 때만 작업을 실행하거나 특정 네트워크에 연결되어 있을 때만 작업을 실행하도록 지정할 수 있습니다. 선택한 내용을 저장하려면 OK 를 클릭합니다.
- 다음으로 설정 탭으로 이동한 후 다음을 구성합니다:
- 요청 시 작업 실행 허용 — 작업을 수동으로 실행할 수 있도록 하려면 이 옵션을 선택하세요.
- 작업이 실패하면 — 작업 실패 시 수행할 작업을 지정하세요. 예: 작업을 다시 시작.
- 작업이 다음 시간보다 오래 실행되면 중지 — 해당되는 경우 시간 제한을 설정하세요.
- 작업이 이미 실행 중이면 — 작업이 트리거되었지만 이미 실행 중일 때 수행할 작업을 선택하세요.
- OK 를 클릭하여 작업을 완료합니다. 작업이 실행될 사용자 계정의 자격 증명을 입력하라는 메시지가 표시됩니다.
고급 구성 및 모범 사례
스크립트 실행 및 표시 제어
작업 스케줄러를 사용할 때 스크립트의 실행 및 표시를 제어하려면 다음 매개변수를 Add arguments 필드의 Action 탭에서 사용할 수 있습니다:
- NoExit — 이 매개변수를 추가하면 스크립트 실행 후 PowerShell 또는 명령 프롬프트 창이 자동으로 닫히지 않도록 할 수 있습니다. 이 옵션은 디버깅에 유용하거나 출력 결과를 직접 확인하기 위해 콘솔 창을 열린 상태로 유지하려는 경우에 유용합니다.
- Command — 이 매개변수를 사용하여 실행할 스크립트의 전체 경로와 필요한 인수를 지정합니다.
예를 들어 다음 내용을 Add arguments 필드에 지정할 수 있습니다:
-NoExit -Command -File C:\Scripts\InstallOfSoftware.ps1
스크립트 활동을 기록하기 위해 출력(결과)을 텍스트 파일 또는 다른 대상에 리디렉션하기
일반적인 Windows 작업 스케줄러 문제 해결
다음은 예약된 작업이 예상대로 실행되지 못하게 할 수 있는 일반적인 문제들과 해결 방법입니다.
작업이 시작되지 않거나 실행되지 않습니다.
- 작업을 실행하는 사용자 계정에 작업을 실행하고, 작업에서 참조하는 모든 파일 또는 디렉터리에 액세스하는 데 필요한 권한이 있는지 확인하세요.
- 트리거 설정, 작업(액션) 매개변수 및 조건과 같은 작업의 구성 설정을 다시 한 번 확인하세요.
- 작업이 활성화되어 있는지 확인하세요.
- 작업을 실행할 때 특정 사용자 계정을 사용하는 경우, 비밀번호가 변경되었는지 확인하고 필요하면 작업에 대한 비밀번호를 업데이트하세요.
작업은 수동으로는 실행되지만 자동으로는 실행되지 않습니다.
- 트리거 설정이 올바른지 확인하세요. 일반적인 문제로는 시작 시간이 잘못되었거나, 예약이 잘못 구성된 경우가 있습니다.
- 컴퓨터가 특정 시간 동안 유휴 상태일 때만 작업이 실행되도록 설정되어 있는 경우처럼, 작업 실행을 막을 수 있는 조건이 있는지 확인하세요. 작업이 유휴 시간 또는 컴퓨터를 사용하지 않을 때 실행되도록 예약되어 있다면 절전 모드나 최대 절전 모드와 같은 전원 설정이 실행을 방해할 수 있습니다. 작업이 실행될 수 있도록 시스템이 계속 활성 상태를 유지하도록 전원 설정을 조정하세요.
작업이 예기치 않게 중지되거나 비정상적으로 동작합니다.
- 작업이 원활하게 실행될 수 있도록 충분한 메모리, CPU 또는 디스크 공간이 사용 가능해야 합니다.
- 작업에 스크립트 실행이 포함된 경우, 스크립트가 작업 스케줄러(Task Scheduler) 외부에서도 올바르게 실행되는지 확인하세요. 두 상황에서 환경 변수, 경로 또는 권한이 어떻게 달라질 수 있는지 고려하십시오.
작업이 특정 오류 코드와 함께 실패합니다.
작업의 기록 또는 이벤트 로그에 표시된 오류 코드를 확인하여, 현재 문제 상황과 해결 방법에 대한 정보를 얻으세요.
작업은 실행되지만 아무 작업도 수행하지 않습니다.
- 프로그램 시작과 같은 작업의 작업(액션) 설정이 올바르게 구성되어 있는지 확인하세요.
- 정책 제한으로 인해 스크립트가 실행되지 않는 경우, 시스템의 실행 정책을 재정의하고 스크립트가 실행되도록 하려면 다음을 추가하는 방안을 고려하세요: -ExecutionPolicy Bypass 인수
- 실행 파일 또는 스크립트의 경로가 올바른지 확인하고, 모든 명령줄 인수가 올바르게 지정되었는지 확인하세요.
- 작업 결과를 파일 또는 다른 대상에 출력해야 한다면 경로가 올바른지 확인하고, 실행 계정에 필요한 쓰기 권한이 있는지 확인하세요.
모니터링 및 보안 예정 작업을 위한 무료 평가판을 신청하세요
일반적인 사용 사례를 위한 실용적인 예시
일반적인 관리 작업을 위한 예제 스크립트
아래는 Windows 작업 스케줄러를 사용해 자동화하고 싶을 수 있는 일반적인 관리 작업에 대한 몇 가지 실용적인 사용 사례와 예제 스크립트입니다.
폴더 백업
다음 스크립트는 C 드라이브의 폴더를 로컬 D 드라이브의 폴더로 백업하는 데 사용할 수 있습니다.
Copy-Item -Path "C:\Source\*" -Destination "D:\Backup" -Recurse -Force
소프트웨어 업데이트 설치
소프트웨어 또는 시스템 구성 요소를 자동으로 업데이트하려면 다음 스크립트를 사용하세요.
Install-WindowsUpdate -AcceptAll -AutoReboot
사용자 알림 보내기
이 스크립트를 사용하여 예정된 이벤트에 대한 알림을 이메일 배포 목록에 보냅니다:
Send-MailMessage -To "AbbeyCrawford@milkyway.com" -From "AbbeyTucker@milkyway.com" -Subject "Daily Meeting Reminder" -Body "This is a reminder about the meeting scheduled for 10:00 AM." -SmtpServer "smtp.milkyway.com"
보안 스캔 수행
악성코드 또는 취약점을 탐지하기 위해 보안 스캔을 자동으로 실행하려면 이 스크립트를 사용하세요:
Start-MpScan -ScanType QuickScan
임시 파일 정리
이 스크립트는 지정한 디렉터리에서 임시 파일을 제거합니다:
Get-ChildItem -Path C:\Windows\Temp\*, $env:TEMP\* -Recurse | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue
서비스 다시 시작
웹 서버 또는 Microsoft SQL server 서비스와 같은 서비스를 다시 시작하려면 다음과 같은 명령을 사용할 수 있습니다:
Restart-Service -Name W3SVC
Restart-Service -Name MSSQLSERVER
복잡한 PowerShell 스크립트 예약 실행
더 복잡한 PowerShell 스크립트도 예약 실행할 수 있습니다. 아래 예시에서 확인할 수 있듯이, 스크립트의 각 섹션 목적을 설명하는 주석을 포함하는 것은 모범 사례입니다.
디스크 공간 사용량 보고
이 스크립트는 디스크 공간 사용량을 빠르게 개요로 제공합니다:
# Script to report disk space usage
Get-PSDrive -PSProvider FileSystem |
Select-Object Name, @{Name="UsedGB";Expression={"{0:N2}" -f (($_.Used - $_.Free)/1GB)}}, @{Name="FreeGB";Expression={"{0:N2}" -f ($_.Free/1GB)}}, @{Name="TotalGB";Expression={"{0:N2}" -f ($_.Used/1GB)}} |
Format-Table -AutoSize
시스템 상태 모니터링
시간이 지남에 따라 시스템 성능을 추적하려면 이 PowerShell 스크립트를 사용하여 CPU 사용량, 메모리 사용량, 디스크 공간을 파일에 기록할 수 있습니다:
# Define the log file path
$logFile = "C:\SystemHealthLog.txt"
# Function to get system health metrics
function Get-SystemHealth {
# Get CPU usage
$cpuUsage = Get-Counter '\Processor(_Total)\% Processor Time'
# Get memory usage
$memoryUsage = Get-Counter '\Memory\Available MBytes'
# Get disk space usage for C: drive
$diskSpace = Get-PSDrive -Name C
$usedSpace = $diskSpace.Used / 1MB
$freeSpace = $diskSpace.Free / 1MB
$totalSpace = $diskSpace.Used + $diskSpace.Free / 1MB
# Format output
$cpuUsageFormatted = "{0:N2}%" -f $cpuUsage.CounterSamples[0].CookedValue
$memoryUsageFormatted = "{0:N2} MB" -f $memoryUsage.CounterSamples[0].CookedValue
$diskSpaceFormatted = "Used: {0:N2} MB, Free: {1:N2} MB, Total: {2:N2} MB" -f $usedSpace, $freeSpace, $totalSpace
# Write to log file
$logEntry = "Date and Time: $(Get-Date) - CPU Usage: $cpuUsageFormatted, Memory Available: $memoryUsageFormatted, Disk Space: $diskSpaceFormatted"
Add-Content -Path $logFile -Value $logEntry
}
# Run the health check
Get-SystemHealth
예약 작업 수정 또는 삭제
하나 이상의 예약 작업을 수정하거나 삭제하기 전에, 기존에 있는 모든 작업을 검토해 보는 것이 좋습니다. 작업 목록을 보려면 다음을 간단히 실행하세요. Get-ScheduledTask cmdlet.
예약 작업 수정
작업을 수정하려면 해당 작업을 마우스 오른쪽 버튼으로 클릭하고 Properties 를 선택합니다(아래 그림 참조). 그런 다음 필요한 설정을 편집하고 OK 를 클릭하여 변경 사항을 저장합니다.
예약 작업 삭제
예약 작업을 삭제하려면 해당 작업을 마우스 오른쪽 버튼으로 클릭하고 Delete 를 선택한 다음 작업을 확인합니다.
PowerShell 스크립트로 예약 작업 만들기
PowerShell 스케줄링 소개
예약 작업을 만들기 위해 Task Scheduler 외에 또 다른 옵션이 있습니다: PowerShell. PowerShell 인터페이스에서 직접 예약 작업을 생성하고 관리하면 생산성, 정확성, 세션 안정성을 크게 향상시킬 수 있으며, 특히 CimSession을 통해 원격 시스템을 관리할 때 더욱 효과적입니다.
다음은 예약 작업을 만들고 관리하는 데 사용되는 주요 PowerShell 명령 중 일부입니다:
- New-ScheduledTask — PowerShell에서 새 예약 작업 개체를 생성합니다
- Register-ScheduledTask — 새 예약 작업을 등록합니다
- New-ScheduledTaskAction — 예약 작업의 작업(동작)을 정의합니다
- New-ScheduledTaskPrincipal — 작업이 실행될 사용자 계정을 저장합니다
- New-ScheduledTaskSettingsSet — 예약 작업의 설정을 정의합니다
- New-ScheduledTaskTrigger — 예약 작업의 트리거를 정의합니다
스케줄링 작업 관리를 위해 PowerShell을 사용하는 이점
예약된 작업을 실행할 때 PowerShell을 사용하면 다음과 같은 이점이 있습니다:
- 사용 편의성 — 복잡한 트리거, 조건, 작업을 쉽게 지정할 수 있습니다.
- 유연성 — 간단한 파일 정리부터 복잡한 시스템 진단 및 복구까지 다양한 작업을 수행할 수 있는 정교한 스크립트를 작성하고 실행할 수 있습니다.
- 시간 절약 — PowerShell 예약 작업을 사용해 PowerShell 스크립트를 실행하면, 반복적이거나 복잡한 작업을 수동으로 수행할 필요가 없습니다.
- 더 쉬운 문제 해결 — PowerShell 스크립트는 오류에 대한 자세한 정보를 기록하거나, 경우에 따라 자동으로 문제를 바로잡으려 시도할 수도 있습니다.
- 원격 실행 — 예약된 작업을 여러 대의 컴퓨터에서 실행하고 처리 속도를 제한(throttling)할 수 있습니다. 이는 특히 대규모 네트워크 환경에서 유용합니다.
- 보안 — PowerShell에는 실행 정책 및 서명된 스크립트와 같은 여러 보안 기능이 포함되어 있어, 시스템에서 승인된 스크립트만 실행되도록 하는 데 도움이 됩니다.
- 효율성 — 작업을 예약할 때 PowerShell을 사용하면, 일반적으로 타사 자동화 도구보다 시스템 리소스를 덜 소모합니다.
- 적응성 — PowerShell의 예약 작업은 변화하는 요구 사항에 맞춰 쉽게 수정, 복제 또는 확장할 수 있습니다.
PowerShell로 예약 작업 만들기
예약 작업을 생성하기 위한 PowerShell 스크립트에는 다음 요소가 포함됩니다.
- $action — 이 항목은 작업이 수행할 작업을 지정합니다. 예를 들어 PowerShell 스크립트를 실행하거나 애플리케이션을 시작하거나 명령을 실행하는 것과 같습니다.
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File C:\Scripts\InstallOfSoftware.ps1"
- $trigger — 이 항목은 작업이 실행될 시점을 지정합니다. 예를 들어 특정 시간, 매일 또는 매주, 또는 시스템 이벤트에 기반해 실행되도록 하는 것 등이 있습니다.
$trigger = New-ScheduledTaskTrigger -Daily -At "10:00AM"
- $principal — 이 항목은 작업이 실행될 사용자 계정을 지정합니다.
$principal = New-ScheduledTaskPrincipal -UserId “NT AUTHORITY\SYSTEM” -LogonType Password
- $settings — 작업 실패를 처리하는 방법, 실행 조건, 배터리 전원 시 동작 방식 같은 옵션이 포함됩니다:
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable
- Register-ScheduledTask — 이 명령은 작업을 작업 스케줄러에 등록합니다:
Register-ScheduledTask -TaskName “Installation of Software" -Action $action -Trigger $trigger -Principal $principal -Settings $settings
아래에서 전체 스크립트 실행 결과를 확인할 수 있습니다:
초보자를 위한 Windows PowerShell 스크립팅 튜토리얼
자세히 알아보기보안 고려사항 및 모범 사례
예약 작업의 보안 영향
작업 스케줄러 또는 PowerShell을 사용하든 작업을 예약할 때, 다음 보안 우려 사항에 반드시 주의하세요:
- 권한 관리 — 예약된 작업은 해당 작업이 스케줄된 계정의 권한으로 실행되므로 악용될 수 있습니다. 계정에 권한 상승이 되어 있으면 이 위험은 더 높아집니다. 꼭 필요한 최소 권한만 가진 계정을 사용해 예약 작업을 실행하세요.
- 스크립트 보안 — 예약 작업이 호출하는 스크립트나 실행 파일 자체가 보안 취약점의 공격 경로가 될 수 있습니다. 예를 들어, 악의적인 공격자는 보호되지 않은 디렉터리에 저장된 스크립트를 교체하거나 수정하여 해로운 명령을 실행할 수 있습니다.
- 프로세스 가로채기 — 예약 작업이 예측 가능하고 높은 권한으로 실행된다면, 공격자는 해당 작업이 실행해야 하는 스크립트를 악성 코드로 교체할 수 있습니다.
- 감사와 책임성 — 악의적인 활동을 탐지하고 대응하기 위해 예약 작업의 생성, 수정, 실행에 대한 상세 로그를 유지하는 것이 필수적입니다.
- 서비스 거부(DoS) — 공격자는 중요한 시간에 과도한 시스템 리소스를 소비하는 작업을 예약함으로써, 호스트 시스템이 의도한 기능을 수행하는 능력을 방해할 수 있습니다.
적절한 보안 컨텍스트로 스크립트를 실행하고, 고권한 계정을 사용할 때의 영향
공격 표면을 최소화하려면, 항상 작업에 필요한 최소 권한을 가진 계정에서 스크립트를 실행하고 관리 권한으로 스크립트를 실행하지 마세요. 이를 위해 스크립트가 필요로 하는 리소스, 권한, 그리고 스로틀 한도를 이해해야 합니다. 예를 들어 스크립트가 시스템 파일을 수정해야 하는지, 특정 데이터를 접근해야 하는지, 또는 네트워크를 통해 통신해야 하는지 확인해 보세요.
또한 실행 정책을 사용하여 스크립트가 실행될 수 있는 조건을 제어하세요. 예를 들어, 신뢰할 수 있는 게시자가 서명한 스크립트에 대해서만 시스템이 스크립트를 실행하도록 제한할 수 있습니다.
서비스로 실행되어야 하는 스크립트의 경우, 비밀번호가 자동으로 관리되기 때문에 더 안전한 Windows 관리 서비스 계정(Windows managed service account, MSA) 또는 그룹 관리 서비스 계정(gMSA)을 사용하는 것을 고려하세요.
예약 작업을 생성하기 위한 모범 사례
예약 작업을 사용함으로써 얻는 이점을 극대화하려면 다음 모범 사례를 따르세요:
- 각 작업의 목적이 명확한지 확인하세요.또한 작업이 무엇을 수행하는지, 그리고 왜 필요한지에 대해 문서화하여, 향후 해당 작업을 다룰 수 있는 다른 사람들이 이해할 수 있도록 하세요.
- 명확한 명명 규칙을 수립하세요. 혼동과 부적절한 작업 실행을 방지하려면, 각 예약 작업에 고유한 taskpath가 설정되어 있는지 확인하세요.
- 검토하고 테스트하세요. 실행하기 전에 스크립트를 신중히 검토하세요. 특히 외부 소스에서 가져온 스크립트라면 의심스러운 코드가 없는지 주의 깊게 확인해야 합니다. 운영 환경에 예약 작업을 배포하기 전에, 스테이징 또는 개발 환경에서 충분히 테스트하세요. 승인된 스크립트의 저장소를 유지하는 것도 좋은 방법입니다.
- 오류 처리 기능을 구현하세요. 모든 스크립트가 일반적인 오류를 우아하게 처리할 수 있어야 하며, 주의가 필요한 문제가 발생했을 때 관련 팀 구성원에게 알리도록 하세요.
- 의존성을 파악하세요. 작업이 외부 서비스나 데이터에 의존하는 경우, 가용성 확인을 수행하고 장애나 지연이 발생했을 때도 우아하게 처리할 수 있도록 하세요.
- 리소스 사용을 고려하세요. 작업의 로직이나 실행 빈도를 조정하는 등, 작업이 리소스를 덜 소모하도록 만드는 방법을 찾아보세요. 작업은 필요한 만큼만 자주 실행하되, 성능 문제를 유발할 정도로 지나치게 자주 실행하지 않아야 합니다. 작업 실행 시간을 선택할 때는 다른 시스템 활동, 잠재적인 충돌 가능성 같은 요소를 고려하세요.
- 보안에 주의하세요. 위에서 제공한 보안 가이드라인 외에도, 보안이 적용된 리소스에 접근이 필요한 작업에는 적절한 인증 및 권한 부여 조치를 사용하고, 작업이 의도치 않게 민감한 데이터를 노출하지 않도록 확인하세요.
- 중요한 작업에는 기본 설정에 의존하지 마세요. 작업 구성은 자신의 구체적인 요구사항에 맞게 커스터마이즈하세요.
- 스크립트를 안전한 위치에 저장하세요. 스크립트를 실행하거나 수정해야 하는 사용자만 접근할 수 있도록 하세요.
- 스크립트에 서명하세요. 가능하다면 신뢰할 수 있는 인증 기관(CA)이 발급한 디지털 인증서로 스크립트에 서명하세요. 이렇게 하면 스크립트의 작성자를 검증할 뿐 아니라, 서명 이후 스크립트가 변조되지 않았는지도 보장할 수 있습니다.
- 모니터링 및 알림을 구현하세요. 로그는 문제를 진단하고 작업의 동작을 이해하는 데 매우 유용합니다. 비정상적인 스크립트 활동이나 성능 저하를 관리자에게 알리는 도구를 사용하면 더 빠르게 대응할 수 있습니다.
- 정기적으로 예약 작업을 검토하고 업데이트하세요. 여기에는 모든 의존 항목 업데이트, 새로운 비즈니스 요구에 따라 일정 조정, 더 이상 필요하지 않은 작업을 중단하는 것이 포함됩니다.
결론
Windows 작업 스케줄러를 사용하면 비즈니스 사용자와 관리자가 매일 또는 매주처럼 특정 날짜와 시간에 정기적으로 PowerShell 스크립트를 실행하거나, 특정 조건이 충족될 때 작업을 실행할 수 있습니다. 작업 스케줄러로 작업을 자동화하면 작업이 정확하고 안정적으로 수행되면서도 시간을 절약할 수 있습니다. 더 고급 사용자는 PowerShell을 사용하여 예약 작업을 만들고 관리할 수 있습니다.
스크립트를 예약할 때는 작업의 목적을 문서화하고, 스크립트 내에서 오류 처리 및 로깅을 사용하며, 최소 권한 원칙 을 적용하여 과도한 권한을 방지해야 합니다. 권한이 손상되어 공격자가 이를 악용하면 보안 위협이 될 수 있습니다.
자주 묻는 질문
Windows 작업 스케줄러란 무엇인가요?
Windows 작업 스케줄러는 Windows 운영 체제에 기본으로 포함된 도구로, 사용자가 작업과 프로세스를 자동으로 실행하도록 예약할 수 있게 해줍니다. 작업 스케줄러를 사용하면 특정 날짜와 시간에 실행하거나 매일 또는 매주처럼 일정한 간격으로 실행되도록 작업을 설정할 수 있습니다.
PowerShell 스크립트를 자동화하기 위해 작업 스케줄러를 사용해야 하는 이유는 무엇인가요?
작업 스케줄러에서 PowerShell 스크립트를 실행하도록 선택하면 반복 작업을 자동화할 수 있어, 추가적인 노력 없이도 작업이 안정적이고 정확하게 수행되도록 보장합니다.
작업 스케줄러를 여는 방법은 무엇인가요?
Win + R 키를 눌러 실행 대화 상자를 엽니다. taskschd.msc 를 입력한 다음 Enter 를 누르세요.
작업 스케줄러에서 새 작업을 만드는 방법은 무엇인가요?
작업 스케줄러 창 오른쪽의 Create Task 를 클릭합니다. 작업에 대한 이름과 설명을 제공하고, 작업(예: Action), 트리거(Triggers), 조건(Conditions), 설정(Settings) 탭에 대해 적절한 설정을 선택한 다음 Save 를 클릭하세요.
작업의 이름과 설명을 지정하는 이점은 무엇인가요?
작업이 무엇을 수행하는지, 그리고 왜 필요한지 설명하는 유용한 이름과 명확한 설명을 제공하면 각 작업이 분명한 목적을 갖도록 하는 데 도움이 되며, 해당 작업을 다루는 다른 사람들이 향후 유지 관리 작업을 더 쉽게 수행할 수 있습니다.
예약된 작업의 트리거를 어떻게 확인하나요?
작업의 Trigger 탭에서 작업을 실행할 시점을 예를 들어 일정에 따라, 시스템 시작 시 또는 사용자가 로그온할 때로 지정할 수 있으며, 반복 간격과 기타 조건도 설정할 수 있습니다.
작업 스케줄러를 사용하여 PowerShell 스크립트를 실행하도록 설정하려면 어떻게 해야 하나요?
- Actions 탭으로 이동한 다음 New 를 클릭하고 Start a program 을 드롭다운 메뉴에서 선택합니다.
- Program/script 필드에, 입력 powershell.exe 를 입력합니다.
- 'Add arguments' 필드에 다음을 입력합니다. 인수 InstallofSoftware.ps1 를 스크립트 이름으로 바꾸세요:
-File C:\Scripts\InstallofSoftware.ps1
사용자가 로그인하지 않은 경우에도 작업을 실행하도록 설정하려면 어떻게 해야 하나요?
작업의 일반 탭에서 옵션 Run whether a user is logged on or not 을 선택하세요.
작업 권한을 관리하고 스크립트가 지정된 기간이 지난 후에 중지되도록 하려면 어떻게 해야 하나요?
작업은 실행되는 계정의 권한을 가집니다. 일반 탭에서 작업을 실행할 계정을 지정할 수 있습니다.
스크립트가 지정한 기간이 지난 후 중지되도록 하려면 설정 탭에서 작업이 다음 시간보다 오래 실행되면 중지 를 선택한 다음, 원하는 시간 또는 일 수를 지정하세요.
스크립트 실행의 표시 여부를 어떻게 제어하나요?
작업 탭의 -NoExit 또는 -Command 매개변수를 Add Argument 필드에 추가하면 스크립트 실행 및 표시 여부를 제어할 수 있습니다.
예상대로 실행되지 않는 작업을 문제 해결하는 데 도움이 되는 팁은 무엇인가요?
비밀번호 만료 또는 변경으로 인해 작업이 실패할 수 있습니다. 설정이 부적절하거나 악의적으로 설계된 예약 작업(예: 과도한 시스템 리소스를 소비하는 작업)은 호스트 머신에서 서비스 거부(DoS)가 발생하게 하여 가용성과 성능에 악영향을 줄 수 있습니다.
기존 예약 작업을 어떻게 수정하나요?
Windows 작업 스케줄러 라이브러리에서 해당 작업을 마우스 오른쪽 버튼으로 클릭한 다음 Properties 를 선택하고 작업 설정에서 원하는 변경을 수행하세요.
예약 작업을 삭제하려면 어떻게 해야 하나요?
작업 스케줄러 라이브러리에서 해당 작업을 마우스 오른쪽 버튼으로 클릭하고 Delete 를 선택합니다.
작업을 예약할 때 PowerShell을 사용하는 장점은 무엇인가요?
작업 스케줄러 GUI에 비해 PowerShell은 작업 구성, 오류 처리 및 로깅에 대해 더 세밀한 제어를 제공하며, 사용자 지정 스케줄링 로직을 정의하기도 더 쉽습니다. 또한 PowerShell을 사용하면 중앙 위치에서 여러 원격 시스템에 대해 작업을 스케줄하고 실행할 수 있습니다.
New-ScheduledTaskTrigger 및 Register-ScheduledTask cmdlet은 어떤 용도로 사용되나요?
New-ScheduledTaskTrigger cmdlet은 작업의 트리거를 정의하는 데 사용되고, Register-ScheduledTask cmdlet은 Windows 작업 스케줄러에 작업을 등록하는 데 사용됩니다.
예약된 작업(스케줄드 태스크)은 보안 측면에서 어떤 영향을 미치나요?
높은 권한을 가진 계정으로 예약된 작업을 실행하면, 해당 계정이 손상(유출)될 경우 보안 위험이 증가하므로 항상 최소 권한 원칙을 염두에 두고 계정을 선택해야 합니다.
적절한 보안 컨텍스트로 스크립트를 실행하려면 어떻게 해야 하나요?
가장 중요한 점은 작업을 완료하는 데 필요한 최소 권한을 가진 계정에서 스크립트를 실행하고, 적절한 경우 관리 서비스 계정(Managed Service Accounts, MSAs) 또는 그룹 관리 서비스 계정(Group Managed Service Accounts, gMSAs)을 사용하는 것입니다. 실행 정책을 사용하여 신뢰할 수 있는 게시자가 서명한 스크립트만 허용하도록 제한하는 방안을 고려하고, 가능하다면 신뢰할 수 있는 인증 기관(Certificate Authority)에서 발급한 디지털 인증서로 스크립트에 서명하세요.
예약된 작업을 구성하고 관리하기 위한 모범 사례에는 어떤 것이 있나요?
주요 모범 사례로는 스크립트를 접근 권한을 통제할 수 있는 보안된 위치에 보관하고, 운영 환경에 적용하기 전에 테스트 환경에서 스크립트를 평가하는 것이 있습니다.
FAQ
공유하기
더 알아보기
저자 소개
Tyler Reese
제품 관리 부사장, CISSP
소프트웨어 보안 업계에서 20년이 넘는 경력을 쌓아온 Tyler Reese는 오늘날 기업이 직면한 빠르게 변화하는 아이덴티티 및 보안 과제에 대해 깊이 잘 알고 있습니다. 현재 그는 Netwrix Identity and Access Management 포트폴리오의 제품 디렉터로 재직 중이며, 시장 동향을 평가하고 IAM 제품 라인의 방향을 설정하는 일을 포함해 궁극적으로는 엔드 유저의 요구를 충족하는 역할을 담당하고 있습니다. 그의 전문 경력은 Fortune 500 기업을 대상으로 한 IAM 컨설팅부터 대형 D2C(Direct-to-Consumer) 기업의 엔터프라이즈 아키텍트로 일한 경험까지 폭넓게 이어져 있습니다. 그는 현재 CISSP 자격증을 보유하고 있습니다.