IFTTT を介して Amazon Echo からコマンドを受信するスクリプトを書いています。
プロセスは次のようになります。
- Alexaに「X」をトリガーするように頼みます
- IFTTTはそれをDropboxアプレットに送信します
- 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
はコンソールでは正常に動作しているように見えますが、タスク スケジューラのスクリプトでは動作していないようです。
問題が分からないのに、なぜ動作しないのでしょうか?