Я пытаюсь, чтобы этот сценарий взял текстовый файл и остановил службы перед перезагрузкой и запустил любые службы, которые не запускались автоматически после запуска машины. Сценарий, который получает список имен служб, состояние и startmode и создает текстовый файл с разделителями-запятыми, строчно работает. Здесь для справки (взято из межсетях, потерял ссылку в моих путешествиях немного Modified..):Начальная служба с VBscript
Const ForAppending = 2
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objLogFile = objFSO.CreateTextFile("service_list.txt", _
ForWriting, True)
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colListOfServices = objWMIService.ExecQuery("Select * from Win32_Service")
For Each objService in colListOfServices
objLogFile.Write objService.Name & ","
objLogFile.Write objService.StartMode & ","
objLogFile.Write objService.State
objLogFile.Writeline
Next
objLogFile.Close
Следующий бит читает файл построчно, сравнивает состояние всех услуг с состояние служб, которые были записаны до того, как машина была отключена. Если они совпадают, то ничего не делать, если они разные, запустите службу:
Const ForReading = 1
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set objServiceName = objWMIService.get("Win32_Service.Name='" & ServiceName & "'")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("\\some path\service_list.txt",ForReading,True,-2)
Do Until objFile.AtEndOfStream
fLine = Split(objFile.ReadLine,",")
'wscript.echo fLine(2)
if InStr(fLine(2),"Running") then
'wscript.echo "it was running!"
if objServiceName.Started then
'do nothing
else
'Set servicetostart = objWMIService.ExecQuery ("Select " & ServiceName & " from Win32_Service Where Name ='Alerter'")
'servicetostart.StartService()
'Result = objServiceName.StartService
'If 0 <> Result Then
' wscript.echo "Start " & ServiceName & " error:" & Result
'End If
objServiceName.StartService
'wscript.echo Servicename & "could not start with error: " & Result
end if
end if
'wscript.echo objServiceName
Loop
На данный момент я ПОЛУЧАТЬ ошибку всякий раз, когда он на самом деле пытается запустить службу. Я получаю «Код ошибки поставщика: 80041004 Источник: SWbemObjectEX». Я просматривал сообщения об этой ошибке и пытался исправить предложенные исправления. Кроме того, как вы можете видеть, я пытаюсь изменить варианты, но я боюсь, что я просто догадываюсь.
На мой вопрос, что вызывает «провал поставщика»? Я посмотрел эту информацию для Win32_Service класса здесь:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa394418%28v=vs.85%29.aspx#methods
и посмотрел метод здесь:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa393660%28v=vs.85%29.aspx
Но не смогли работать, где я неправильно ,
Спасибо,
Джо
на стороне записки, службы я тестирование, то есть. убедитесь, что служба запускается, создает текстовый файл, а затем останавливает службу и запускает код «стартовой службы» - это Защитник Windows. Имя службы - «WinDefend».
FINAL РАБОЧИЙ КОД:
Const ForReading = 1
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("\\vmware-host\Shared Folders\Documents\Biffduncan\Monthly Server Maintanence\service_list.txt",ForReading,True,-2)
Do Until objFile.AtEndOfStream
fLine = Split(objFile.ReadLine,",")
Set objService = objWMIService.get("Win32_Service.Name='" & fLine(0) & "'")
if InStr(fLine(2),"Running") then
'wscript.echo "it was running!"
if objService.Started then
'do nothing
else
Result = objService.StartService()
if Result <> 0 then
wscript.echo "The service: " & objService.Name & " did not start with error: " & Result
else
wscript.echo "Service " & objService.Name & " started"
end if
end if
end if
Loop
Благодарим за отзыв. Я попытался запустить и остановить службу вчера, используя свой собственный код 'strComputer =". Установить objWMIService = GetObject ("winmgmts:" & "{impersonationLevel = impersonate}! \\" & strComputer & "\ root \ cimv2") Установить objService = objWMIService.get ("Win32_Service.Name = 'WinDefend'") objService.StartService'. Мой тест вчера работал, поэтому я продолжил сценарий. Однако сейчас я запускал свой код и ваш, и я получил ту же ошибку отказа поставщика. – Joe
UPDATE - столкнулся с документом [this] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa394559%28v=vs.85%29.aspx). Если вы просмотрите ошибки, вы увидите первый диапазон кодов ошибок, 80041xx - 8004140 справится с неправильными разрешениями или проблемами с инфраструктурной проблемой WMI. Будет продолжаться обновление, когда я нахожу больше информации. – Joe
Вы прочитали первый абзац моего ответа? –