使用日志记录在多台计算机上创建任

时间:2014-01-16 08:23:42

标签: batch-file logging vbscript

我正在尝试使用域在多台计算机上创建任务,并从输入文件中提供脚本。

它可以是VBS或BATCH,但我无法让它工作。 这就是我到目前为止所做的:

InputFile = "c:\scripts\input\workstations.Txt"
Const OverWriteFiles = True
Set oShell = WScript.CreateObject("WSCript.shell")
Set objFile = objFSO.OpenTextFile(InputFile)
Set myLog = objFSO.OpenTextFile("C:\scripts\output\log.log", 2)
Do Until objFile.AtEndOfStream
  strComputer = objFile.ReadLine
  On Error Resume Next
  oShell.run "cmd schtasks /Create /U lumcnet\user/p wachtwoord /SC DAILY /ST 05:02 /TN     ""Herstart"" /TR ""\""C:\PACS Beheer Tools\Werkstation herstarten\Notification.HTA\"" /F /RL HIGHEST /S" strComputer
  If Err Then myLog.WriteLine strComputer
  On Error Goto 0
Loop
myLog.Close

MsgBox "Done" 

FOR /f %%a IN (c:\scripts\input\workstation.txt) DO (
schtasks /Create /U lumcnet\pacs-report /p report /SC DAILY /ST 05:02 /TN "Herstart" /TR "\"C:\PACS Beheer Tools\Werkstation herstarten\Notification.HTA\"" /F /RL HIGHEST /S 2-%%a
if ERRORLEVEL 1 echo %%a>>"c:\scripts\output\log.log"
) 
GOTO :EOF

2 个答案:

答案 0 :(得分:1)

您在该行中有一个虚假的尾随strComputer

oShell.run "cmd ... /S" strComputer

/S之后添加一个空格,并在字符串和变量之间添加一个连接运算符:

oShell.run "cmd ... /S " & strComputer

答案 1 :(得分:1)

  1. 如果您的路径有空格,则需要在命令的开头和结尾放置一个\" .....(您已经拥有空间,并且我拿出来 - 对不起:))

  2. 您还缺少cmd和strComputer变量之间的&符号。

  3. 您尚未定义objFSO。

  4. 无论如何,这对我来说似乎有用了:

    InputFile = "c:\scripts\input\workstations.Txt"
    Const OverWriteFiles = True
    Set oShell = WScript.CreateObject("WSCript.shell")
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFile = objFSO.OpenTextFile(InputFile)
    Set myLog = objFSO.OpenTextFile("C:\scripts\output\log.log", 2)
    Do Until objFile.AtEndOfStream
      strComputer = objFile.ReadLine
      On Error Resume Next
      oShell.run "schtasks /Create /U lumcnet\user /p wachtwoord /SC DAILY /ST 05:00 /TN herstart /TR ""\""C:\admin folder\workstation reboot\Notification.HTA\"""" /F /RL HIGHEST /S " & strComputer
      If Err Then myLog.WriteLine strComputer
      On Error Goto 0
    Loop
    myLog.Close
    
    MsgBox "Done" 
    

    免责声明:我绝不会建议像这样存储用户名和密码。有权访问底层系统的任何人都可以枚举凭据。

    我希望有所帮助。