Ich schreibe ein Skript, das Befehle vom über IFTTT verbundenen Amazon Echo empfängt.
Der Ablauf ist wie folgt:
- Ich bitte Alexa, „X“ auszulösen
- IFTTT sendet das an das Dropbox-Applet
- Dropbox schreibt eine Textdatei mit dem Namen "X" in ein Verzeichnis
- Ein Task Scheduled Powershell-Skript wird alle 5 Sekunden wiederholt, um alle Dateien in diesem Verzeichnis zu erkennen.
- Skript führt Befehle basierend auf Dateinamen aus
Hier ist ein kurzes Beispiel des Skripts:
$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"
}
Alle oben genannten Befehle funktionieren einwandfrei, mit Ausnahme eines Befehls, rundll32.exe user32.dll,LockWorkStation
der zwar in der Konsole, aber nicht über ein Skript im Taskplaner zu funktionieren scheint.
Ich sehe das Problem nicht, also warum funktioniert es nicht?