LockWorkStation이 작업 스케줄러를 통해 Powershell에서 작동하지 않습니다.

LockWorkStation이 작업 스케줄러를 통해 Powershell에서 작동하지 않습니다.

IFTTT로 연결된 Amazon Echo로부터 명령을 수신하는 스크립트를 작성 중입니다.

프로세스는 다음과 같습니다.

  • Alexa에게 "X"를 실행하라고 요청합니다.
  • IFTTT가 이를 Dropbox Applet으로 보냅니다.
  • Dropbox는 디렉터리에 "X"라는 텍스트 파일을 씁니다.
  • 작업 예약 Powershell 스크립트는 5초마다 반복하여 해당 디렉터리의 모든 파일을 검색합니다.
  • 스크립트는 파일 이름을 기반으로 명령을 실행합니다.

다음은 스크립트의 간단한 예입니다.

$SearchDirectory = "C:\Users\Username\Dropbox\IFTTT"
$SleepTime = 5
$Status = "none"

Remove-Item -Path "$SearchDirectory\shutdown.txt" -Force -ErrorAction SilentlyContinue
Remove-Item -Path "$SearchDirectory\restart.txt" -Force -ErrorAction SilentlyContinue
Remove-Item -Path "$SearchDirectory\sleep.txt" -Force -ErrorAction SilentlyContinue
Remove-Item -Path "$SearchDirectory\lock.txt" -Force -ErrorAction SilentlyContinue

While ($True) {
  Do {
    Start-Sleep -Seconds $SleepTime

    if (Test-Path -Path "$SearchDirectory\shutdown.txt") { $Status = "shutdown" }
    if (Test-Path -Path "$SearchDirectory\restart.txt") { $Status = "restart" }
    if (Test-Path -Path "$SearchDirectory\sleep.txt") { $Status = "sleep" }
    if (Test-Path -Path "$SearchDirectory\lock.txt") { $Status = "lock" }
  }
  Until ($Status -ne "none")

  switch ($Status) {
    "shutdown" { Remove-Item -Path "$SearchDirectory\shutdown.txt"; Stop-Computer -Force; break }
    "restart" { Remove-Item -Path "$SearchDirectory\restart.txt"; Restart-Computer -Force; break }
    "sleep" { Remove-Item -Path "$SearchDirectory\sleep.txt"; Suspend-Computer; break}
    "lock" { Remove-Item -Path "$SearchDirectory\lock.txt"; Invoke-Command {rundll32.exe user32.dll,LockWorkStation}; break}
    "none" { break }
  }

  $Status = "none"
}

위의 모든 명령은 rundll32.exe user32.dll,LockWorkStation콘솔에서 제대로 작동하는 것처럼 보이지만 작업 스케줄러의 스크립트를 통해서는 작동하지 않는 것을 제외하고는 모두 잘 작동합니다.

문제를 볼 수 없는데 왜 작동하지 않나요?

관련 정보