2013-12-10 2 views
0

как вы поживаете?Выполнение кода VBS в VBA с правами администратора

Я хочу выполнить VBS-код в среде VBA, в этом случае я работаю в редакторе VB в MS Excel 2010. К сожалению, я не знаю, как преобразовать код VBS, чтобы VBA смог его выполнить.

Чтобы дать представление о том, над чем я работаю: хочу выполнить командную строку VBS, требующую прав администратора. Это приглашение перезапустит процесс на другом ПК в сети. Код VBS работает отлично, когда выполняется через cmd. Причина, по которой я хочу использовать VBA, заключается в том, что в сети много ПК, и я хочу использовать цикл для выполнения кода VBS для каждого ПК.

ОК, вот код VBS:

strComputer = "Computername" 
Set objShell = CreateObject("Wscript.Shell") 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2:Win32_Process") 
intReturn = objWMIService.Create("c:\Program Files (x86)\Symantec\Symantec Endpoint Protection\12.1.1000.157.105\Bin64\smc.exe -stop", Null, Null, intProcessID) 
Wscript.Sleep 10000 
intReturn2 = objWMIService.Create("c:\Program Files (x86)\Symantec\Symantec Endpoint Protection\12.1.1000.157.105\Bin64\smc.exe -start", Null, Null, intProcessID) 

Теперь вопрос, как я могу получить этот образец кода в моей среде VBA? Я знаю, как выполнить сам VBS-файл через VBA, но этого недостаточно, потому что мне нужна переменная. Кроме того, права администратора связаны с вопросом.

ОК, вот это обновление, я теперь этот код в моем VBA, но я не в состоянии получить все началось, я также пытался реализовать Запуск от имени администратора:

Sub run_vbs_script() 
Dim strComputer As String 
'Dim WshShell 
Dim objShell 
Dim objWMIService 
Dim dDate As Date 

strComputer = "IEDBR8D60CR" 

Set objShell = CreateObject("Wscript.Shell") 

RunasStruser = "runas /user:Username Domain\domain name" 

objShell.Run RunasStruser, 0 

objShell.SendKeys "password" 

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2:Win32_Process") 

intReturn = objWMIService.Create("c:\Program Files (x86)\Symantec\Symantec Endpoint Protection\12.1.1000.157.105\Bin64\smc.exe -stop", Null, Null, intProcessID) 

dDate = DateAdd("s", 10, DateTime.Now) 
Do While dDate > DateTime.Now 
    DoEvents 
Loop 

intReturn2 = objWMIService.Create("c:\Program Files (x86)\Symantec\Symantec Endpoint Protection\12.1.1000.157.105\Bin64\smc.exe -start", Null, Null, intProcessID) 

Set objShell = Nothing 
Set objWMIService = Nothing 

End Sub 
+0

Вы являетесь администратором или у вас есть права администратора? –

+1

'Я хочу выполнить VBS-код в среде VBA', так почему же тег vb.net? – Plutonix

+0

Возможный дубликат [Вызов .vbs scipt из Excel VBA] (http://stackoverflow.com/questions/13133126/calling-a-vbs-scipt-from-excel-vba) –

ответ

1

В редакторе VBA в Excel необходимо добавить ссылку на WMI Scripting

Dim strComputer As String 
    Dim objShell 
    Dim objWMIService 
    Dim dDate As Date 
    strComputer = "Computer" 
    Set objShell = CreateObject("Wscript.Shell") 
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2:Win32_Process") 
    intReturn = objWMIService.Create("c:\Program Files (x86)\Symantec\Symantec Endpoint Protection\12.1.1000.157.105\Bin64\smc.exe -stop", Null, Null, intProcessID) 

    dDate = DateAdd("s", 10, DateTime.Now) 
    Do While dDate > DateTime.Now 
     DoEvents 
    Loop 
    intReturn2 = objWMIService.Create("c:\Program Files (x86)\Symantec\Symantec Endpoint Protection\12.1.1000.157.105\Bin64\smc.exe -start", Null, Null, intProcessID) 

    Set objShell = Nothing 
    Set objWMIService = Nothing 
+0

Спасибо, посмотрим. – bongofred

+0

Хорошо, это, кажется, правильный путь. Теперь мне нужно только запустить этот код с правами администратора. Какие-либо предложения? – bongofred

0

This site has example code для окончания процесс через WMI с помощью vba. Взглянуть. Пример закрывает notepad.exe, но я уверен, что вы могли бы это сделать то же самое для

Symantec
+0

Спасибо, посмотрим и вернемся с результатами. – bongofred

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