ブラウザでダウンロード Windows には通常はあまり必要がない( 実際はめったに使わない )サービスがたくさんありますが、 作業のサイクルによっても、その不必要率は変化します。 逆に言うと、サービスの設定で「停止」に設定してしまうと、今度必要な場合に 使え無い原因が解らなかったり、すぐ使えなかったりいろいろ問題があります。 ですから、インストール時に実行されているサービス等は通常実行しておいて、 作業に入る前にいらないサービスを停止したほうが良いです。 また、そうする事によってサービスに対する理解も深まるはずです 対象リストの作成list.vbs をエクスプローラからダブルクリックすると、target.txt が 作成され、対象リストが作成されます。 現在実行中のサービスの一覧を取得して、最初はコメントデータとして 先頭にセミコロンを置き、停止したいサービスのセミコロンを削除します いったん、セミコロンを削除した後、再度 list.vbs を実行しても、その エントリは変更されません。リストの中に無いサービスが実行されている と、追加されますが無い場合は何も起こりません target.txt
01. ;Browser 02. ;CryptSvc 03. ;DcomLaunch 04. ;Dhcp 05. ;dmserver 06. ;Dnscache 07. ;ERSvc 08. ;Eventlog 09. ;EventSystem 10. ・ 11. ・ 12. サービス名の一覧 13. ・ 14. ・ 15. ・ 16. ;srservice 17. ;SSDPSRV 18. ;TapiSrv 19. ;TermService 20. ;Themes 21. ;TrkWks 22. ;W32Time 23. ;winmgmt 24. ;wscsvc 作成するコード直接実行するスクリプトは、list.vbs ですが、これは必ずコマンド プロンプトでスクリプトを実行する為にだけ実行されます 01. Set Fso = CreateObject( "Scripting.FileSystemObject" ) 02. Set WshShell = CreateObject( "WScript.Shell" ) 03. 04. strCurPath = WScript.ScriptFullName 05. Set obj = Fso.GetFile( strCurPath ) 06. Set obj = obj.ParentFolder 07. strCurDir = obj.Path 08. 09. strCommand = "cmd.exe /c cscript " "" & strCurDir & "\list_service_started.vbs" " & pause" 10. Call WshShell.Run( strCommand, , True ) 実際の処理は以下のコードになりますが、WMI の扱いは他の PC に対する ログインを想定してそのように記述しています 01. str = WScript.FullName 02. str = Right( str, 11 ) 03. str = Ucase( str ) 04. if str <> "CSCRIPT.EXE" then 05. strMessage = "エクスプローラから実行する場合は、list.vbs を使用して下さい" 06. WScript.Echo strMessage 07. WScript.Quit 08. end if 09. 10. Set Fso = Wscript.CreateObject( "Scripting.FileSystemObject" ) 11. 12. strCurPath = WScript.ScriptFullName 13. Set obj = Fso.GetFile( strCurPath ) 14. Set obj = obj.ParentFolder 15. strCurDir = obj.Path 16. 17. strServer = "." 18. 19. on error resume next 20. Set objLocator = Wscript.CreateObject( "WbemScripting.SWbemLocator" ) 21. if Err.Number <> 0 then 22. Wscript.Echo Err.Description 23. Wscript.Quit 24. end if 25. 26. Set objWmi = objLocator.ConnectServer( _ 27. strServer, _ 28. "root\cimv2" , _ 29. strUser, _ 30. strPass ) 31. if Err.Number <> 0 then 32. Wscript.Echo Err.Description 33. Wscript.Quit 34. end if 35. 36. objWmi.Security_.ImpersonationLevel = 3 37. if Err.Number <> 0 then 38. Wscript.Echo Err.Description 39. Wscript.Quit 40. end if 41. on error goto 0 42. 43. addData = "" 44. if Fso.FileExists( strCurDir & "\target.txt" ) then 45. Set InObj = Fso.OpenTextFile( strCurDir & "\target.txt" , 1 ) 46. aData = Split( InObj.ReadAll(), vbCrLf ) 47. InObj.Close() 48. else 49. aData = Array( "" ) 50. end if 51. 52. 53. ' WMI よりサービス一覧を取得 54. Set objTarget = objWmi.ExecQuery( _ 55. "select Name,Started,PathName from Win32_Service" _ 56. ) 57. 58. on error resume next 59. For Each obj in objTarget 60. 61. if obj.Started then 62. bFind = False 63. For I = 0 to Ubound(aData) 64. strTarget = Trim(aData(I)) 65. if strTarget = obj.Name then 66. bFind = True 67. Exit For 68. end if 69. strTarget = Right(aData(I), Len(aData(I))-1) 70. strTarget = Trim(strTarget) 71. if strTarget = obj.Name then 72. bFind = True 73. Exit For 74. end if 75. Next 76. if Not bFind then 77. if addData <> "" then 78. addData = addData & vbCrLf 79. end if 80. addData = addData & ";" & obj.Name 81. end if 82. end if 83. 84. Next 85. if addData <> "" then 86. addData = addData & vbCrLf 87. end if 88. on error goto 0 89. 90. Set OutObj = Fso.OpenTextFile( strCurDir & "\target.txt" , 2, True ) 91. 92. if Ubound(aData) > 0 then 93. OutObj.Write Join( aData, vbCrLf ) 94. end if 95. OutObj.Write addData 96. 97. OutObj.Close() 停止用のコード普通にサービス名が書かれたテキストのリストであれば良いので、 list.vbs によって作成される target.txt である必要はありません。 また、少し変更( PC/USER/PASS を設定 )すれば、指定した PC の サービスを一括して停止する事も可能です ※ その場合は、strServer と、strUser と strPass を直接設定 01. str = WScript.FullName 02. str = Right( str, 11 ) 03. str = Ucase( str ) 04. if str <> "CSCRIPT.EXE" then 05. strMessage = "エクスプローラから実行する場合は、stop.vbs を使用して下さい" 06. WScript.Echo strMessage 07. WScript.Quit 08. end if 09. 10. Set Fso = Wscript.CreateObject( "Scripting.FileSystemObject" ) 11. 12. strCurPath = WScript.ScriptFullName 13. Set obj = Fso.GetFile( strCurPath ) 14. Set obj = obj.ParentFolder 15. strCurDir = obj.Path 16. 17. strServer = "." 18. 19. on error resume next 20. Set objLocator = CreateObject( "WbemScripting.SWbemLocator" ) 21. if Err.Number <> 0 then 22. Wscript.Echo Err.Description 23. Wscript.Quit 24. end if 25. 26. Set objWmi = objLocator.ConnectServer( _ 27. strServer, _ 28. "root\cimv2" , _ 29. strUser, _ 30. strPass ) 31. if Err.Number <> 0 then 32. Wscript.Echo Err.Description 33. Wscript.Quit 34. end if 35. 36. objWmi.Security_.ImpersonationLevel = 3 37. if Err.Number <> 0 then 38. Wscript.Echo Err.Description 39. Wscript.Quit 40. end if 41. on error goto 0 42. 43. Set InObj = Fso.OpenTextFile( strCurDir & "\target.txt" , 1 ) 44. aTarget = Split( InObj.ReadAll(), vbCrLf ) 45. InObj.Close() 46. 47. For I = 0 to UBound( aTarget ) 48. 49. if Trim( aTarget( I ) ) <> "" and Left( aTarget( I ), 1 ) <> ";" then 50. 51. strQuery = "select * from Win32_Service where Name = '" & aTarget(I) & "'" 52. Set objTarget = objWmi.ExecQuery( strQuery ) 53. 54. on error resume next 55. For Each obj in objTarget 56. 57. if obj.Started then 58. obj.StopService() 59. Wscript.Echo obj.Name & " を停止させました" 60. end if 61. 62. Next 63. on error goto 0 64. 65. ' 終了待ち 66. nCnt = 0 67. Do while true 68. Wscript.Sleep 1000 69. 70. Set objTarget = objWmi.ExecQuery( strQuery ) 71. For Each obj in objTarget 72. strResult = obj.State 73. Next 74. 75. if strResult = "Stopped" then 76. Exit Do 77. end if 78. 79. nCnt = nCnt + 1 80. if nCnt > 60 then 81. Exit Do 82. end if 83. 84. Loop 85. 86. end if 87. 88. Next |