1

我的问题是当 UPS 告诉我的家庭服务器停电时,我需要向我的 NAS 发送关机命令。我想通过使用(Windows 10 家庭版)PC 服务器的关闭通知来做到这一点,它可以触发批处理文件作为关闭事件的一部分,而不是使用额外的硬件。我已经确定打开一个特定的 URL 会导致 NAS 正常关闭。

https://192.168.1.10/get_handler?PAGE=System&OUTER_TAB=tab_shutdown&INNER_TAB=NONE&shutdown_option1=1&command=poweroff&OPERATION=set

这些问题似乎与试图绕过导致浏览器的对话有关。首先,它要求提供凭据。我可以通过将它们包含在 URL 调用中来绕过这个,如下所示:

开始 "" "C:\Program Files\Mozilla Firefox\firefox.exe" " https://username:password@192.168.1.10/get_handler?PAGE=System&OUTER_TAB=tab_shutdown&INNER_TAB=NONE&shutdown_option1=1&command=poweroff&OPERATION=set "

现在它会弹出一个对话框,要求我确认我想以“用户名”身份登录,这再次挫败了我让这个运行无人值守的尝试(当停电时我可能在任何地方)。有没有解决的办法?仅供参考,我放弃了尝试使用 Microsoft Edge,因为它通过在任何地方插入空格来不断地将 URL 参数切割成碎片。每次我尝试它时,它都会手动抱怨安全证书。我想我也会遇到与该浏览器相同的确认请求问题。所以我需要一种方法来抑制所有这些对话,只需进行 URL 调用。请问有什么想法吗?

4

1 回答 1

0

在这个问题发布超过 24 小时后没有任何答案告诉我这是一个棘手的问题并让我不断尝试。在我尝试了所有我能想到的用 Window 自己的工具集解决它并发现没有任何效果之后,我意识到我需要一些额外的东西来解决这个问题。最后我放弃并安装了免费的Autohotkey并编写了一个脚本来完成整个工作,包括处理对话框。一切正常后,为了方便起见,我从脚本中创建了一个可执行文件,这样我就可以轻松地从关闭的批处理 (.bat) 文件中调用它。此解决方案有效。这是需要解决类似问题的任何人的脚本:

> runWait, C:\Program Files\Mozilla Firefox\firefox.exe
> https://admin:password@192.168.1.10/get_handler?PAGE=System&OUTER_TAB=tab_shutdown&INNER_TAB=NONE&shutdown_option1=1&command=poweroff&OPERATION=set
> 
> #Persistent SetTimer, MsgBoxCheck, 3000 return
> 
> MsgBoxCheck: If WinExist("ahk_class MozillaDialogClass") {   
> SetControlDelay -1    ControlClick, , Confirm,    SetTimer,
> MsgBoxCheck, off    exitApp } else {    SetTimer, MsgBoxCheck, off   
> MsgBox, 4, , Debug - No Confirm Window Found.    exitApp } return

请注意,要使此功能适用于非 Mozilla 程序,您需要更改 ahk_class 参数。我建议您使用 Windows Spy 来确定您要关闭的窗口类别。您还需要将“确认”更改为您的窗口标题。

于 2017-06-14T19:13:02.467 回答