【问题标题】:How Run Cisco AnyConnect with Task Scheduler如何使用任务计划程序运行 Cisco AnyConnect
【发布时间】:2015-12-06 18:06:55
【问题描述】:

我想每晚运行一个脚本:

  1. 启动 VPN
  2. 执行 SQL 查询
  3. 断开 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


【解决方案1】:

http://www.cisco.com/c/en/us/td/docs/security/vpn_client/anyconnect/anyconnect30/release/notes/anyconnect30rn.html Ctrl+F 并输入“Open Caveats in Release 3.0.5080”

看起来该版本的 AnyConnect 存在很多问题,这些问题都取决于很多事情。我建议更新到最新版本。如果该版本有适用于您的错误,请等到发布修复它的版本。在那之前,你无能为力。

【讨论】:

    猜你喜欢
    • 2010-09-22
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多