이 스크립트는 재부팅하기 전에이 텍스트 파일을 실행 및 중지하고 시스템을 다시 시작한 후에 자동으로 시작되지 않는 서비스를 시작하려고합니다. 서비스 이름, 상태 및 시작 모드의 목록을 가져 와서 줄 단위로 쉼표로 구분 된 텍스트 파일을 만드는 스크립트가 올바르게 작동합니다. 다음은 참조 용입니다 (인터 웹에서 가져온, 내 여행의 링크를 잃은 약간 수정..) :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 Defender입니다. 서비스 이름은 "WinDefend"입니다.
최종 작업 CODE :
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 = 가장)! \\"& strComputer & "\ root \ cimv2") 세트 objService = objWMIService.get ("Win32_Service.Name = 'WinDefend'") objService.StartService'. 어제 제 시험이 효과가 있었기 때문에 나는 대본을 계속 읽었습니다. 그러나 지금은 코드와 코드를 실행했는데 동일한 Provider Failure Error가 발생했습니다. – Joe
업데이트 - [이] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa394559%28v=vs.85%29.aspx) 문서를 발견했습니다. 오류를 살펴보면 오류 코드의 첫 번째 범위 인 80041xx - 8004140이 부적절한 사용 권한을 처리하거나 WMI 인프라 문제와 관련된 문제를 보게됩니다. 더 많은 정보를 찾으면 업데이트가 계속됩니다. – Joe
내 대답의 첫 번째 단락을 읽었습니까? –