Windows 10 计划任务 Powershell 脚本无法关闭监视器

Windows 10 计划任务 Powershell 脚本无法关闭监视器

我对 Windows 脚本非常不熟悉(我有 Linux 背景),但我还是尝试创建 Windows 版本的 udev 规则。我拼凑了各种搜索中的片段,以检测我的键盘/鼠标何时被拔出(使用 USB 开关)并关闭屏幕。当我自己运行 powershell 脚本时,它运行良好,但我尚未使用任务计划程序使其工作。我在下面附上了简单的脚本。

C:\Scripts\keyboard_listener.ps1

$query =  "SELECT * FROM __InstanceOperationEvent WITHIN 5 WHERE TargetInstance ISA 'Win32_PnPEntity'"

Register-WmiEvent -Query $query -SourceIdentifier RemovableDiskDetection -Action {

    $class = $eventArgs.NewEvent.__CLASS
    $device = $eventArgs.NewEvent.TargetInstance.Caption

    switch($class)
    {
        __InstanceCreationEvent {
            if ($device -eq "Logitech Gaming HID Device") {
                Write-Host "Inserted, device id: $device"
            }
        }

        __InstanceDeletionEvent {
            if ($device -eq "Logitech Gaming HID Device") {
                Write-Host "Removed, device id: $device"
                (Add-Type '[DllImport("user32.dll")]public static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);' -Name a -Pas)::SendMessage(-1,0x0112,0xF170,2)
            }
        }
    }
}

我很确定我已经正确创建了任务。操作是powershell -noexit -file C:\Scripts\keyboard_listener.ps1。我甚至记录了计划任务以确保它正在运行并将 stdout/stderr 输出到日志。当我查看日志时,我可以按预期看到“已插入/已移除”调试消息,但监视器不会关闭。正如我提到的,当我自己运行此命令时,它会按预期工作。我遗漏了什么?

我尝试从 .cmd 文件运行 powershell 脚本,结果相同。我弄乱了 SetExecutionPolicy 标志。不过,我认为这两者都不重要,因为我能够在日志文件中获取调试输出。我相信这意味着 powershell 脚本正在执行,并且断开连接/重新连接事件正在触发。唯一没有发生的事情是我的显示器关闭了。

补充:我还没有深入研究过这个问题,但是当键盘重新连接时,我可以重新打开屏幕吗?我自己还没有解析关闭显示器的命令,因此无法确切了解它的工作原理,但如果能修改它以重新打开屏幕就好了。不过,这不是我的首要任务。

相关内容