2013-02-19 2 views
0

Я пытаюсь сделать работу vbs, идея заключается в том, что она будет удаленно устанавливать msi в список машин, содержащихся в файле txt.Проблемы с ошибкой VBScript: Ожидаемый конец 800A03F6

Я получаю несколько ошибок, во-первых:

неверное число аргументов или недействительного присвоение имущества: "WshShell.Exec" Линия 27, Char 1

WshShell.Exec "%COMSPEC% /C COPY " & StrInstallFile & " \\" & strComputer _ 
    & "\C$\Windows\Temp", 0, TRUE 

I seemd чтобы иметь вокруг этого с:

Set WshExec = WshShell.Exec...... 

затем получил:

ожидается конец заявления линии 27 CAHR 29

добавив &:

Set WshExec = WshShell.Exec & "%COMSPEC%..... 

теперь получает меня:

ожидается конец строки заявления 27 голец 110

, который является предпоследней запятой

Set WshExec = WshShell.Exec & "%COMSPEC% /C COPY" & StrInstallFile _ 
    & " \\" & strComputer & "\C$\Windows\Temp", 0, TRUE 

так я не уверен, что это неправильно в этой точке, и будет ли изменение всей линии к набору была правильная вещь, чтобы сделать.

ответ

0

Вы смешиваете .Run и .Exec. Прототип .Exec:

object.Exec(strCommand) 

показывает, что вам нужно коснуться как:

Set oExec = WshShell.Exec("%COMSPEC% /C COPY " & StrInstallFile & " \" & strComputer & "\C$\Windows\Temp") 

Если вы хотите .run вместо этого, попробовать что-то вроде:

Dim iRet : iRet = WshShell.Run(strCommand, [intWindowStyle], [bWaitOnReturn]) 
Dim iRet : iRet = WshShell.Run("%comspec% ...", 0, True) 
+0

работал совершенной благодаря ниже приведен полный сценарий, позволяющий использовать его. Мне еще нужно добавить некоторую проверку ошибок, поэтому я могу проверить, завершился ли msi. –

0
Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objFile = objFSO.OpenTextFile("MachineList.Txt", 1) 
StrInstallFile="install_flash_player_11_active_x.msi" 
StrNoUpdateFile="mms.cfg" 
StrInstallCMD="msiexec.exe /qn /i " 

Do Until objFile.AtEndOfStream 

strComputer = objFile.ReadLine 

' --------- Check If PC is on ------------- 
Set WshShell = WScript.CreateObject("WScript.Shell") 
Set WshExec = WshShell.Exec("ping -n 1 -w 1000 " & strComputer) 'send 3 echo requests, waiting 2secs each 
strPingResults = LCase(WshExec.StdOut.ReadAll) 
If InStr(strPingResults, "reply from") Then 

' ---------- Successful ping - run remote commands ---------------- 

Set objWMIService = GetObject("winmgmts:" _ 
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 


' --------- Copy msi to windows temp folder 
Set oExec = WshShell.Exec("%COMSPEC% /C COPY " & StrInstallFile & " \\" & strComputer & "\C$\Windows\Temp") 

' --------- execute msi file on remote machine 
Set oExec = WshShell.Exec("%COMSPEC% /C psexec \\" & StrComputer & " " & strInstallCMD & "c:\Windows\Temp\" & StrInstallFile) 

' --------- Copy no "no update" file to remote machine, first line is for win7, second for xp 
Set oExec = WshShell.Exec("%COMSPEC% /C COPY " & StrNoUpdateFile & " \\" & strComputer & "\C$\Windows\SysWOW64\Macromed\Flash") 
Set oExec = WshShell.Exec("%COMSPEC% /C COPY " & StrNoUpdateFile & " \\" & strComputer & "\C$\Windows\system32\macromed\flash") 

Else 

' ---------- Unsuccessful ping - Leave computer name in MachineList.txt and continue ---------------- 

strNewContents = strNewContents & strComputer & vbCrLf 

End If 
Loop 

objFile.Close 

Set objFile = objFSO.OpenTextFile("MachineList.txt", 2) 
objFile.Write strNewContents 
objFile.Close 
+0

Ну, похоже, вы скопировали этот код из [здесь] (http://www.itsupportguides.com/vbs-scripts/vbs-script-to-install-software-remotely/). – serenesat

Смежные вопросы