블로그로 돌아가기
Guide

PowerShell로 Windows PC 절전 막기: 테스트한 스크립트 2개

관리자 권한 없이 PowerShell로 Windows가 절전되지 않게 하는 법. SetThreadExecutionState로 절전과 화면 꺼짐을 막거나, 1분마다 F15를 눌러 유휴 타이머를 초기화합니다. 실행과 중지 방법, powercfg 한 줄, Teams와 Slack에 주는 효과.

Slack Green Team
September 29, 2026
October 9, 2026
5 분 읽기
Share:
windows
powershell
remote work

PowerShell로 관리자 권한 없이 Windows PC가 절전되지 않게 하는 방법은 두 가지입니다. 깔끔한 쪽은 Windows API SetThreadExecutionState를 호출해 시스템과 디스플레이가 사용 중이라고 Windows에 알리는 방법입니다. 스크립트가 도는 동안 절전과 화면 꺼짐을 막고, 입력은 전혀 보내지 않습니다. 다른 하나는 SendKeys로 1분마다 F15 키를 누르는 방법으로, 유휴 타이머가 초기화되므로 Microsoft Teams도 초록으로 남습니다. F15 스크립트는 Slack 데스크톱 앱도 활성으로 유지할 것입니다. 앱이 같은 유휴 타이머를 10초마다 읽기 때문입니다(Slack 데스크톱 4.52.178 코드, 2026년 10월 7일 확인). Windows에서 시간을 재 보지는 않았습니다. SetThreadExecutionState 스크립트는 입력을 보내지 않으므로 Slack은 10분 뒤 여전히 자리 비움이 됩니다.

PC에서 도는 스크립트로는 PC가 잠겨 있거나, 절전 중이거나, 꺼져 있는 동안 Slack을 초록으로 유지할 수 없습니다. 그럴 수 있는 방법은 Slack 활성 상태 유지하는 법에 정리했습니다.

스크립트 1: SetThreadExecutionState로 절전 막기

동영상 플레이어가 쓰는 것과 같은 방식으로, 시스템과 디스플레이를 켜 두라고 Windows에 요청합니다. 키보드나 마우스 입력은 만들지 않습니다.

# keepawake.ps1 - keeps Windows and the display awake until you press Ctrl+C
$sig = '[DllImport("kernel32.dll")] public static extern uint SetThreadExecutionState(uint esFlags);'
$power = Add-Type -MemberDefinition $sig -Name 'Power' -Namespace 'Win32' -PassThru

# ES_CONTINUOUS (0x80000000) | ES_SYSTEM_REQUIRED (0x1) | ES_DISPLAY_REQUIRED (0x2)
$null = $power::SetThreadExecutionState([uint32]2147483651)
Write-Host "Keeping this PC awake. Press Ctrl+C to stop."
try {
    while ($true) { Start-Sleep -Seconds 60 }
} finally {
    $null = $power::SetThreadExecutionState([uint32]2147483648)   # ES_CONTINUOUS: back to normal
}

잘 되는지 확인하려면 다른 PowerShell 창에서 powercfg /requests를 실행하세요. 스크립트가 도는 동안 DISPLAY와 SYSTEM 아래에 PowerShell이 보입니다.

스크립트 2: 1분마다 F15 누르기

F15는 어느 키보드에도 없는 키라서 대부분의 앱은 무시하지만, Windows는 입력으로 셉니다.

# f15.ps1 - presses F15 once a minute until you press Ctrl+C
$shell = New-Object -ComObject WScript.Shell
while ($true) {
    $shell.SendKeys('{F15}')
    Start-Sleep -Seconds 60
}

입력이기 때문에 Teams가 쓰는 유휴 타이머가 초기화되고, Teams는 대개 "대화 가능"으로 남습니다. 키는 앞에 있는 창으로 갑니다. 이런 소프트웨어 입력은 Windows가 "주입된 입력"으로 표시하므로 모니터링 도구에 보일 수 있습니다. 마우스 지글러는 탐지되나를 보세요. Num Lock을 쓰는 버전과 근무 시간에만 도는 버전 등 Teams 전용 스크립트는 Teams를 활성으로 유지하는 PowerShell 스크립트에 있습니다. 포인터를 움직이는 지글러를 Python, AutoHotkey, 5달러짜리 USB 보드로 만드는 법은 마우스 지글러 직접 만들기에, 같은 두 스크립트의 AutoHotkey v2 버전은 컴퓨터 절전을 막는 AutoHotkey 스크립트에 있습니다.

스크립트 실행하고 멈추기

  • 스크립트를 메모장에 붙여 넣고 keepawake.ps1로 저장합니다.
  • PowerShell을 열고(관리자 권한 필요 없음) 그 폴더로 이동합니다.
  • 실행합니다: powershell -ExecutionPolicy Bypass -File .\keepawake.ps1
  • 멈추려면 Ctrl+C를 누르거나 창을 닫습니다. Windows는 평소 전원 설정으로 돌아갑니다.

회사가 PowerShell 스크립트를 막아 두었다면 정책을 우회하지 마세요. 대신 관리자 권한 없이 회사 컴퓨터 절전 막기의 설정이나 도구를 쓰세요. 원격 데스크톱 세션 안에서는 F15 스크립트가 세션 유휴 타이머도 초기화합니다. RDP 시간 제한 정책은 원격 데스크톱 세션을 유지하는 법에서 다룹니다.

Slack에서 다시는 '자리 비움'으로 표시되지 마세요

클라우드 기반. 다운로드 불필요. 노트북이 꺼져 있어도 24시간 작동.

배치나 cmd라면 시간 제한을 바꾸기

스크립트를 계속 돌리지 않고 전원 연결 중 절전을 막으려면 이렇게 합니다.

powercfg /change standby-timeout-ac 0
powercfg /change monitor-timeout-ac 0

0은 "안 함"이라는 뜻입니다. 나중에 되돌릴 때는 powercfg /change standby-timeout-ac 30처럼 원하는 분을 넣습니다. 회사가 관리하는 PC에서는 정책으로 잠겨 있을 수 있습니다. 디스플레이 타이머를 초 단위로 바꾸는 법과 잠금 화면 타이머는 Windows 11 화면 시간 제한 바꾸는 법에 있습니다.

다운로드가 끝날 때까지 PC를 깨워 두기

절전 모드에 들어가면 다운로드가 멈춥니다. Windows가 디스크를 쉬게 하고 네트워크를 끊기 때문에, Steam은 PC가 깨어날 때까지 다운로드를 일시 중지로 표시하고 브라우저 다운로드는 네트워크 오류로 실패하는 일이 많습니다. 화면이 꺼지거나 잠겨도 다운로드는 멈추지 않습니다. 컴퓨터는 계속 돌아가고 있기 때문입니다. 그러니 다운로드를 위해서는 절전만 막으면 되고, 디스플레이는 꺼져도 됩니다.

상태다운로드가 계속되나요?
켜져 있고 화면이 꺼졌거나 잠김예
절전, 최대 절전, 시스템 종료아니요
노트북 덮개를 닫음(기본 동작)아니요, 덮개를 닫으면 절전에 들어감

아래는 스크립트 1에서 디스플레이 플래그를 빼고, 폴더에 5분 동안 새로 쓰인 파일이 없으면 Windows가 다시 절전에 들어갈 수 있게 한 버전입니다.

# awake-while-downloading.ps1 - no sleep while files in the folder are still changing
param(
    [string]$Folder = "$env:USERPROFILE\Downloads",
    [int]$QuietMinutes = 5
)
$sig = '[DllImport("kernel32.dll")] public static extern uint SetThreadExecutionState(uint esFlags);'
$power = Add-Type -MemberDefinition $sig -Name 'Power' -Namespace 'Win32' -PassThru

# ES_CONTINUOUS (0x80000000) | ES_SYSTEM_REQUIRED (0x1): no sleep, the screen may still turn off
$null = $power::SetThreadExecutionState([uint32]2147483649)
try {
    do {
        Start-Sleep -Seconds 60
        $since = (Get-Date).AddMinutes(-$QuietMinutes)
        $busy = Get-ChildItem $Folder -Recurse -File -ErrorAction SilentlyContinue |
            Where-Object { $_.LastWriteTime -gt $since } | Select-Object -First 1
    } while ($busy)
} finally {
    $null = $power::SetThreadExecutionState([uint32]2147483648)   # back to normal
}
Write-Host "No writes for $QuietMinutes minutes. Sleep is allowed again."

다운로드가 시작된 뒤에 실행하세요. Steam은 스스로 절전을 막지 않으니, 스크립트가 Steam의 다운로드 폴더를 보게 하고 Steam은 켜 둡니다.

powershell -ExecutionPolicy Bypass -File .\awake-while-downloading.ps1 -Folder "C:\Program Files (x86)\Steam\steamapps\downloading"

Mac에서는 터미널에서 두 줄이면 됩니다. caffeinate -i가 유휴 절전을 막고, -w $$는 셸이 끝나면 막기를 그만둡니다.

caffeinate -i -w $$ &
while [ -n "$(find ~/Downloads -type f -mmin -5 | head -n 1)" ]; do sleep 60; done

2026년 10월 4일 macOS 26.5.2에서 조용한 시간을 1분으로 줄여 테스트 폴더로 돌려 봤습니다. 파일을 쓰는 동안에는 pmset -g assertions에 PreventUserIdleSystemSleep named: "caffeinate command-line tool"이 나왔습니다. 쓰기가 멈추자 반복문이 끝났고 이 항목도 사라졌습니다. 플래그 설명은 Mac의 caffeinate 명령에 있습니다.

어떤 스크립트를 쓸까

스크립트절전 막기Teams 초록Slack 활성
SetThreadExecutionState막음안 됨안 됨
1분마다 F15막음대개 됨아마 됨(측정 안 함)
powercfg 시간 제한전원 연결 중 막음안 됨안 됨
서버 방식 표시 상태 일정필요 없음안 됨(Slack 전용)됨

Teams 시간은 Teams가 자리 비움으로 바뀌기까지 걸리는 시간을, Slack 규칙은 Slack은 얼마나 오래 활성 상태로 유지되나를, Windows에서 쓸 수 있는 방법은 Windows에서 Slack 활성 상태 유지하기를 보세요. 스크립트 1과 같은 일을 하는 기성 앱은 PowerToys Awake입니다. PowerToys Awake로 Slack이 활성 상태로 유지될까에서 확인했습니다.

자주 묻는 질문

관리자 권한이 필요한가요?

필요 없습니다. 다만 회사가 PowerShell 스크립트를 막아 둔 경우는 예외입니다.

스크립트를 멈추면 설정이 원래대로 돌아오나요?

돌아옵니다. 스크립트 1은 끝날 때 ES_CONTINUOUS만 다시 보내고, 스크립트 2는 멈추면 키를 더 보내지 않습니다. powercfg로 바꾼 시간 제한만은 직접 되돌릴 때까지 그대로입니다.

Always Active

마우스 흔들기는 그만.

수백 명의 원격 근무자들이 Slack 상태를 걱정하지 않습니다. 한 번 설정하면 영원히 초록불.

Related Articles

Guide

How to See All Your DMs in Slack, Including the Hidden Ones

The DMs tab lists your direct messages with people. App DMs, Slackbot and DMs with deleted accounts sit elsewhere. We compared the tab with the full list the Slack API returned.

Slack Green Team
Guide

Slack Images Not Showing? 5 Causes We Reproduced

We uploaded images to a Slack test channel and then switched each image setting off, ran /collapse, and posted from a bot that was not in the channel. Five causes, each reproduced.

Slack Green Team
Guide

How to Message Yourself on Slack (and What It Notifies)

Your own name under Direct messages opens a private DM with yourself. We sent it a note, a file, a scheduled message and a reminder, and checked which ones raised a badge.

Slack Green Team