# StockBot 작업 스케줄러 등록 (전체 재등록용) # 실행: powershell -ExecutionPolicy Bypass -File scripts\setup_scheduler.ps1 # 주의: 이 파일은 UTF-8 BOM으로 저장해야 한글 경로가 올바르게 등록됨 # 콘솔 인코딩 UTF-8 강제 (한글 경로 깨짐 방지) [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 $OutputEncoding = [System.Text.Encoding]::UTF8 chcp 65001 | Out-Null $PROJECT = "C:\Users\whdwo\OneDrive\바탕 화면\stockbot_v3" $weekdays = @( [DayOfWeek]::Monday, [DayOfWeek]::Tuesday, [DayOfWeek]::Wednesday, [DayOfWeek]::Thursday, [DayOfWeek]::Friday ) function Register-StockTask($name, $time, $script, $limitMin) { $trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek $weekdays -At $time $action = New-ScheduledTaskAction ` -Execute "powershell.exe" ` -Argument "-NonInteractive -ExecutionPolicy Bypass -File `"$PROJECT\scripts\$script`"" ` -WorkingDirectory $PROJECT $settings = New-ScheduledTaskSettingsSet ` -ExecutionTimeLimit (New-TimeSpan -Minutes $limitMin) ` -StartWhenAvailable ` -DontStopIfGoingOnBatteries ` -RunOnlyIfNetworkAvailable:$false $settings.DisallowStartIfOnBatteries = $false # 배터리 시작 제한 해제 Register-ScheduledTask -TaskName $name -TaskPath "\StockBot\" ` -Trigger $trigger -Action $action -Settings $settings -RunLevel Limited -Force | Out-Null # PowerShell 5.1 버그: Register-ScheduledTask가 한글 경로를 ANSI로 저장 # → XML export → 경로 수정 → 재import로 교정 $xml = Export-ScheduledTask -TaskName $name -TaskPath "\StockBot\" $stored = (Get-ScheduledTask -TaskName $name -TaskPath "\StockBot\").Actions[0].Arguments if (-not ($stored -match [regex]::Escape("바탕 화면"))) { $garbled = ($stored -replace '.*OneDrive\\(.+?)\\stockbot.*', '$1') if ($garbled -ne $stored) { $fixedXml = $xml.Replace($garbled, "바탕 화면") Register-ScheduledTask -TaskName $name -TaskPath "\StockBot\" -Xml $fixedXml -Force | Out-Null } } Write-Host "[OK] $name 등록 완료 (평일 $time)" -ForegroundColor Green } # ── 3개 태스크 등록 (StockBot_Bot 제거 — /morning이 /start-bot을 호출함) ──── # 08:15 claude /morning → 뉴스+KIS 수집 → daily_context.json → /start-bot 호출 Register-StockTask "StockBot_Morning" "08:15" "run_morning.ps1" 20 # 11:20 claude /midday → 장중 스냅샷 → midday_context.json → 점심 세션 시작 Register-StockTask "StockBot_Midday" "11:20" "run_midday.ps1" 20 # 15:30 claude /evening → 결과 분석 → 리포트 → Discord Register-StockTask "StockBot_Evening" "15:30" "run_evening.ps1" 30 # StockBot_Bot 비활성화 유지 (이미 존재할 경우) $botTask = Get-ScheduledTask -TaskName "StockBot_Bot" -TaskPath "\StockBot\" -ErrorAction SilentlyContinue if ($botTask) { Disable-ScheduledTask -TaskName "StockBot_Bot" -TaskPath "\StockBot\" | Out-Null Write-Host "[OK] StockBot_Bot 비활성화 유지" -ForegroundColor Yellow } Write-Host "" Write-Host "등록된 작업:" -ForegroundColor Cyan Get-ScheduledTask -TaskPath "\StockBot\" | Format-Table TaskName, State