PATH 탐색에 기대면 작업 스케줄러 컨텍스트의 PATH가 로그온 세션과 다를 때 powershell.exe를 찾지 못하고, 그 경우 워치독은 로그 한 줄 없이 실패만 남긴다. %SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe로 고정한다.
48 lines
1.9 KiB
Text
48 lines
1.9 KiB
Text
' VignettePublicRuntimeWatchdog 작업 스케줄러 액션용 숨김 런처.
|
|
'
|
|
' 작업 스케줄러가 powershell.exe 를 직접 실행하면 -WindowStyle Hidden 이어도 conhost
|
|
' 콘솔 창이 실행 순간 번쩍인다. 워치독은 5분 주기라 그 번쩍임이 계속 화면을 가린다
|
|
' (2026-08-08/09/12 세 번 반복된 증상). wscript 로 Run(cmd, 0) 하면 창이 아예 생성되지
|
|
' 않는다. GlassDeck scripts\sync-ai-auth-hidden.vbs 와 동일 패턴이다.
|
|
'
|
|
' 이 래퍼는 pin 인자를 해석하지 않는다. 등록된 인자를 그대로 전달만 하고, provenance
|
|
' 검증(detached HEAD / clean tree / SHA pin)은 watch-public-runtime.ps1 이 수행한다.
|
|
' 경로를 하드코딩하지 않으므로 stable source root 가 바뀌어도 이 파일은 그대로 쓴다.
|
|
Option Explicit
|
|
|
|
Dim objShell, args, i, arg, cmd, exitCode, dryRun, psExe
|
|
|
|
Set objShell = CreateObject("WScript.Shell")
|
|
Set args = WScript.Arguments
|
|
If args.Count = 0 Then
|
|
WScript.Echo "usage: watch-public-runtime-task.vbs -File <watch-public-runtime.ps1> -StableSourceRoot <root> ..."
|
|
WScript.Quit 2
|
|
End If
|
|
|
|
If LCase(args(0)) = "syntax-only" Then
|
|
WScript.Quit 0
|
|
End If
|
|
|
|
' PATH 탐색에 기대지 않는다. 작업 스케줄러 컨텍스트의 PATH 는 로그온 세션과 다를 수
|
|
' 있고, 그때 powershell.exe 를 못 찾으면 워치독은 로그 한 줄 없이 실패만 남긴다.
|
|
dryRun = False
|
|
psExe = objShell.ExpandEnvironmentStrings("%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe")
|
|
cmd = """" & psExe & """ -NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden"
|
|
For i = 0 To args.Count - 1
|
|
arg = args(i)
|
|
If i = 0 And LCase(arg) = "print-command" Then
|
|
dryRun = True
|
|
ElseIf InStr(arg, " ") > 0 Then
|
|
cmd = cmd & " """ & arg & """"
|
|
Else
|
|
cmd = cmd & " " & arg
|
|
End If
|
|
Next
|
|
|
|
If dryRun Then
|
|
WScript.Echo cmd
|
|
WScript.Quit 0
|
|
End If
|
|
|
|
exitCode = objShell.Run(cmd, 0, True)
|
|
WScript.Quit exitCode
|