[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] Server2008开机脚本VBS只执行了一部分

自己写了个脚本用来监视指定IP地址,如果PING不通就关闭计算机,但放入SERVER 2008开机脚本中却只执行了一部分(objLOG.WriteLine(FormatLogTEXT(0, "脚本开始工作"))),以后不管指定IP通与不通后面的语句都没能正确执行,请求各位帮忙看一下问题出在哪儿,是否是权限?在本机测试和登录SERVER 2008 后测试正常。
  1. '脚本定时PING指定IP,如果PING不能则关闭计算机
  2. '保护文件服务器硬盘不受停电损害,在非在线式UPS维持下可以关机
  3. '脚本将生成日志
  4. Dim strIP        '检测的IP
  5. Dim objWSH        '执行PING的对象
  6. Dim objFSO        '日志写入的对象
  7. Dim objLOG        '日志
  8. Dim strLOGFILE    '日志文件名
  9. Dim strOUT        '接收PING执行结果的对象
  10. Dim oRE            '正则对象
  11. Dim strLine        '从结果中读取的行
  12. Dim lFLAG        '关机标志
  13. Dim nSleep        'PING间隔 单位:秒
  14. Dim nTimeOut    '超时次数, 防止偶尔PING不能
  15. Dim nCount        '计数器
  16. Dim nLineNum    '行号计数器
  17. Dim strTEXT        '显示或写入日志的内容变量, 使脚本简洁些
  18. Dim strErrTEXT    '错误时的提示
  19. nLineNum = 1
  20. nTimeOut = 20
  21. nCount = 0
  22. nSleep = 20 * 1000
  23. strIP = "192.168.180.110"
  24. strLOGFILE = "D:\doc\ScanLog.txt"
  25. strErrTEXT = "目标地址PING不通!可能停电, 可能交换机故障!稍后将关闭服务器!"
  26. Set objFSO = CreateObject("Scripting.FileSystemObject")
  27. Set objLOG = objFSO.OpenTextFile(strLOGFILE, 8, True)
  28. objLOG.WriteLine("==========================================================")
  29. objLOG.WriteLine(FormatLogTEXT(0, "脚本开始工作"))
  30. ' <只执到这儿,日志文件里只留了什么时候开始工作,以后不管通与不通都不执行>
  31. Set objWSH = CreateObject("WScript.shell")
  32. Set oRE = New RegExp
  33. While True
  34.     Set strOUT = objWSH.Exec("ping " & strIP)
  35.     While Not strOUT.StdOut.AtEndOfStream
  36.         strLine = strOUT.StdOut.ReadLine
  37.         oRE.Pattern = "^请求超时|^Reply|^Request|目标主机无法访问"
  38.         lFLAG = oRE.Test(strLine)
  39.         If lFLAG Then
  40.             nCount = nCount + 1
  41.             strTEXT = FormatLogTEXT(nLineNum, "目标地址PING不通!")
  42.             WScript.Echo strTEXT
  43.             objLOG.WriteLine(strErrTEXT)
  44.             If nCount >= nTimeOut Then
  45.                 nLineNum = nLineNum + 1
  46.                 strTEXT = FormatLogTEXT(nLineNum, "准备关机!")
  47.                 objLOG.WriteLine(strTEXT)
  48.                 WScript.Echo strErrTEXT
  49.                 WScript.Sleep nSleep
  50.                 '关机代码
  51.                 objWSH.Exec("Shutdown -s")
  52.                 Set objFSO = Nothing
  53.                 Set objWSH = Nothing
  54.                 Set objLOG = Nothing
  55.                 Set oRE    = Nothing
  56.                 WScript.Quit
  57.             End If
  58.             nLineNum = nLineNum + 1
  59.         Else
  60.             '如果PING通计数器复位
  61.             oRE.Pattern = "TTL=64"
  62.             lFLAG = oRE.Test(strLine)
  63.             If lFLAG Then
  64.                 nCount = 0
  65.                 WScript.Echo "Ping OK!"
  66.             End If
  67.         End If
  68.     Wend
  69.     WScript.Sleep nSleep
  70. Wend
  71. Function CNWeekday(sn)
  72.     Dim strR
  73.     Select Case Weekday(sn)
  74.         Case 1
  75.             strR = "星期天"
  76.         Case 2
  77.             strR = "星期一"
  78.         Case 3
  79.             strR = "星期二"
  80.         Case 4
  81.             strR = "星期三"
  82.         Case 5
  83.             strR = "星期四"
  84.         Case 6
  85.             strR = "星期五"
  86.         Case 7
  87.             strR = "星期六"
  88.     End Select
  89.     CNWeekday = strR
  90. End Function
  91. Function FormatLogTEXT(nLN, strTxt)
  92.     FormatLogTEXT = nLN & Chr(9) & Date & CNWeekday(Date) & " " & time & " " & chr(9) & strTxt
  93. End Function
复制代码

登录SERVER 2008 后测试正常

那么考虑延时几分钟

要判断哪里出错,多加几行日志
第一行执行成功
第二行执行成功
......

找到出错的地方,On Error Resume Next
写入错误信息
MsgBox "错误代码 " & vbTab & Err.Number      & vbCrLf & _
       "错误对象 " & vbTab & Err.Source      & vbCrLf & _
       "帮助文件 " & vbTab & Err.HelpFile    & vbCrLf & _
       "上下文ID " & vbTab & Err.HelpContext & vbCrLf & _
       "错误说明 " & vbTab & Err.Description

QQ 20147578

TOP

已经按您说的试过了,还是无效,执行到标注位置就没结果了,只有登录后才一切正常,估计是权限问题吧。

十分感谢您的帮助!

TOP

返回列表