【发布时间】:2015-12-06 18:06:55
【问题描述】:
我想每晚运行一个脚本:
- 启动 VPN
- 执行 SQL 查询
- 断开 VPN
目前我有一个用于 1-3 的脚本,但在将它们安排为任务时遇到了问题。
当我手动运行它们时,每个脚本都能正常工作。
当我安排任务并设置仅在用户登录时运行时也可以使用,然后手动运行它
但是当我选择运行时,无论用户是否登录,什么都没有发生。 VPN 永远不会连接,所以 sql 无法运行,等等。
我对在任务管理器中引用每个脚本的方式进行了各种更改(exp 使用“s,在 Program/Script 中使用完整路径与使用 Start In),但似乎没有任何效果。
有谁知道是什么阻止了任务运行?
以下是一些屏幕截图和代码:
我开始认为 VPN 客户端在我未登录时阻止自己运行。
我还编写了 AutoIt 脚本,它在我登录时可以工作,但在我不登录时就不能工作。
#include <Constants.au3>
;~close any existing vpn
CloseVPN()
;~start cmd
Run("C:\WINDOWS\system32\cmd.exe")
WinWaitActive("C:\WINDOWS\system32\cmd.exe")
;~start vpn
send('"C:\Program Files (x86)\Cisco\Cisco AnyConnect Secure Mobility Client\vpncli.exe"' & "{ENTER}")
Sleep(5000)
;~disconnect vpn
send("disconnect" & "{ENTER}")
;~send connect commands
send("connect VPNADDRESS" & "{ENTER}")
Sleep(2000)
send("USERNAME" & "{ENTER}")
Sleep(2000)
send("PASSWORD" & "{ENTER}")
Sleep(2000)
;~run and wait for sql command
RunSQL();
;~disconnect vpn
send("disconnect" & "{ENTER}")
CloseVPN()
;~close all cmd processes
Local $process4 = ProcessList("cmd.exe")
For $i = 1 To $process4[0][0]
ProcessClose($process4[$i][1])
Next
;~close cmd window
ProcessClose("C:\WINDOWS\system32\cmd.exe")
WinClose("C:\WINDOWS\system32\cmd.exe")
;~-------------------------------------
;~close vpn function
Func CloseVPN()
Local $process1 = ProcessList("vpncli.exe")
For $i = 1 To $process1[0][0]
ProcessClose($process1[$i][1])
Next
Local $process2 = ProcessList("vpnui.exe")
For $i = 1 To $process2[0][0]
ProcessClose($process2[$i][1])
Next
;~ Local $process3 = ProcessList("vpnagent.exe")
;~ For $i = 1 To $process3[0][0]
;~ ProcessClose($process3[$i][1])
;~ Next
EndFunc
;~-------------------------------------
;~run SQL function
Func RunSQL()
;~start cmd
Local $iPID = Run("C:\WINDOWS\system32\cmd.exe")
WinWaitActive("C:\WINDOWS\system32\cmd.exe")
Send('sqlcmd -Q "EXEC sp_Merge" -S MYSQLSERVER -d MYDATABASE -o "C:\MergeScripts\sql_log.txt"' & "{ENTER}")
Send("exit" & "{ENTER}")
ProcessWaitClose($iPID)
EndFunc
【问题讨论】:
-
您是否尝试从首先需要设置 WiFi 连接的笔记本电脑进行连接?因为这不是默认完成的..
-
没有。这是来自具有静态 IP 的服务器。
-
我已经尝试了所有建议 使用 Windows 任务调度程序运行批处理文件
-
也许 AnyConnect 需要将数据存储在您的用户帐户的
%APPDATA%目录的子目录中或在HKCU下的 Windows 注册表中,在未登录的情况下按计划任务运行时不可用在。我建议使用免费的Process Monitor 记录所有注册表和文件系统访问,同时从登录帐户运行脚本。也许您可以看到注册表中的哪些数据以及 AnyConnect 访问了哪些文件,这些可能在未登录的情况下运行脚本时不可用。
标签: powershell batch-file scheduled-tasks