Windows 10サービスのスタートアップの種類の構成のバックアップ
Windows 10の新規インストールを実行した後、未使用のWindowsサービスを無効にすることは、実行する時間のかかるタスクの1つです。 構成が完了したら、スクリプトを使用してサービスの起動状態をバックアップし、その後のインストールや、複数のコンピューターでタスクを自動化する必要がある場合に使用できるようにすることができます。
サービス状態のバックアップは、Windowsサービスのトラブルシューティングを行い、加えた変更をすばやくロールバックする場合にも役立ちます。
関連:コマンドライン、Regedit、または自動実行を使用してWindowsでサービスを削除するWindowsのバックアップサービス構成(スタートアップの種類)
これが、私が書いたWindowsサービスのスタートアップ構成のバックアップVBScriptです。 スクリプトは、サービス構成を.reg
(登録エントリ)と.bat
(Windowsバッチファイル)の2つのファイル形式で出力することにより、すべてのサービスの起動状態をバックアップし、後でサービス構成を復元できるようにします。
'説明:このスクリプトは、Windowsサービスのスタートアップ構成をREGファイルにバックアップします。 'Windows 10、Windows Server 2016の場合'©2016-2019 Ramesh Srinivasan 'Webサイト://www.winhelponline.com/blog/'改訂:2019年7月7日Option Explicit If WScript.Arguments.length = 0 Then Dim objShell:Set objShell = CreateObject( "Shell.Application")objShell.ShellExecute "wscript.exe"、Chr(34)&_ WScript.ScriptFullName&Chr(34)& "uac"、 ""、 "runas"、1 Else Dim WshShell、 objFSO、strNow、intServiceType、intStartupType、strDisplayName、iSvcCnt Dim sREGFile、sBATFile、r、b、strComputer、objWMIService、colListOfServices、objService Set WshShell = CreateObject( "Wscript.Shell")Set objFSO = Wscript.FileObject( "Scripting。" )strNow = Year(Date)&Right( "0"&Month(Date)、2)&Right( "0"&Day(Date)、2)Dim objFile:Set objFile = objFSO.GetFile(WScript.ScriptFullName)sREGFile = objFSO.GetParentFolderName(objFile)& "\ svc_curr_state_"&strNow& ".reg" sBATFile = objFSO.GetParentFolderName(objFile)& "\ svc_curr_state_"&strNow& ".bat" Set r = objFSO.CreateTextFile(sREGFile、 True)r.WriteLine "Windows Registry Editor Version 5.00" r.WriteBlankLines 1 r.WriteLine "; Services Startup Configuration Backup"&Now r.WriteBlankLines 1 Set b = objFSO.CreateTextFile(sBATFile、True)b.WriteLine "@echo Restore "&Now b.WriteBlankLines 1 strComputer ="に保存されたサービスのスタートアップ状態。 iSvcCnt = 0 Dim sStartState、sSvcName、sSkippedSvc Set objWMIService = GetObject( "winmgmts:" _& "{impersonationLevel = impersonate}!\\"&strComputer& "\ root \ cimv2")Set colListOfServices = objWMIService.ExecQuery _( "Select * Win32_Serviceから))colListOfServicesの各objServiceに対してiSvcCnt = iSvcCnt + 1 r.WriteLine "[HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \"&trim(objService.Name)& "]" sStartState = lcase(objService.StartMode)sSvcName = objService.Name Select Case sStartState Case "boot" r.WriteLine chr(34)& "Start"&Chr(34)& "= dword:00000000" b.WriteLine "sc.exe config"&sSvcName& "start = boot" Case "system" r.WriteLine chr(34)& "Start"&Chr(34)& "= dword:00000001" b.WriteLine "sc.exe config"&sSvcName& "start = system" Case "auto" 'チェック自動の場合(遅延開始)r.WriteLine chr(34)& "Start"&Chr(34)& "= dword:00000002" If objService.DelayedAutoStart = True Then r.WriteLine chr(34)& "DelayedAutostart"&Chr (34)& "= dword:00000001" b.WriteLine "sc.exe config"&sSvcName& "start = delay-auto" Else r.WriteLine chr(34)& "DelayedAutostart"&Chr(34)& "=-" b.WriteLine "sc.exe config"&sSvcName& "start = auto" End If Case "manual" r.WriteLine chr(34)& "Start"&Chr(34)& "= dword:00000003" b.WriteLine "sc.exe config"&sSvcName& "start = demand "Case" disabled "r.WriteLine chr(34)&" Start "&Chr(34)&" = dword:00000004 "b.WriteLine" sc.exe config "&sSvcName&" start = disabled "Case" unknown "sSkippedSvc = sSkippedSvc& "、"&sSvcName 'Case Else End Select r.WriteBlankLines 1 Next If trim(sSkippedSvc) "" Then WScript.Echo iSvcCnt& "サービスが見つかりました。 サービス "&sSkippedSvc&"をバックアップできませんでした。 "その他のWScript.Echo iSvcCnt&"サービスが見つかり、そのスタートアップ構成がバックアップされました。 "End If r.Close b.WriteLine" @pause "b.Close WshShell.Run" notepad.exe "&sREGFile WshShell.Run" notepad.exe "&sBATFile Set objFSO = Nothing Set WshShell = Nothing End If
VBScriptの使用方法
- 上記のコード行をメモ帳にコピーします
- 拡張子が.vbsのファイルを保存します(例:
services_startup_config_backup.vbs
。 - ダブルクリックしてスクリプトを実行します。
スクリプトは自身を管理者(昇格)として再起動し、Windowsサービスとそのスタートアップの種類の構成の一覧を照会します。 結果は、後で復元できるように.reg
ファイルと.bat
ファイルに書き込まれます。 2つのファイルは、スクリプトと同じフォルダーに作成されます。
出力ファイルにはプレフィックスsvc_curr_state _が付き、その後に現在の日付がyyyymmdd形式で続きます—例: svc_curr_state_20190706.reg
& svc_curr_state_20190706.bat

注:スクリプトは、サービスが遅延開始用に構成されているかどうかも考慮します。 自動(遅延開始)スタートアップタイプのサービスの場合、 DelayedAutoStart
という名前の追加のレジストリ値が使用されます。 DelayedAutoStartが1に設定され、開始値が2(自動)に設定されている場合、サービスは自動(遅延開始)として構成されます。 バッチファイルには、これらのサービスのスタートアップモードとしてdelayed-auto
れます。
サービスのスタートアップの種類の構成の復元
サービスのスタートアップの種類の構成をバックアップから復元するには、2つの形式のいずれかを選択します。
.regファイル
.regファイルを使用してサービスの起動設定を復元する場合、サービス構成を更新するには、.regファイルを適用した後にWindowsを再起動する必要があります。 ただし、これは推奨される方法です。
.batファイル
バッチファイルには、サービスのスタートアップ構成をリアルタイムで変更するSCコマンドが含まれています。 メソッドを使用する場合、再起動は必要ありません。 バッチファイルは、管理者のコマンドプロンプトウィンドウから実行してください。

その他の注意事項
- 一部のサービスでは、 [SC] ChangeServiceConfig FAILED 5:などのエラーが発生する場合があります。 これは、サービスをロックダウンするサービス権限またはセキュリティ記述子が原因です。 その場合、LOCALSYSTEMアカウントでコマンドプロンプトウィンドウを起動して、バッチファイルを実行できます。
- Windows 10では、アンダースコア(
_
)とそれに続くいくつかの数字を持つ多くのサービス名を見ることができます。 これらの番号(サフィックス)は、他のWindows 10コンピューターの番号と一致しない場合があります。 ここではいくつかの例を示します。- AarSvc_8561415
- BcastDVRUserService_8561415
- BluetoothUserService_8561415
- CaptureService_8561415
- cbdhsvc_8561415
- CDPUserSvc_8561415
- ConsentUxUserSvc_8561415
- CredentialEnrollmentManagerUserSvc_8561415
- DeviceAssociationBrokerSvc_8561415
- DevicePickerUserSvc_8561415
- DevicesFlowUserSvc_8561415
- LxssManagerUser_8561415
- MessagingService_8561415
- OneSyncSvc_8561415
- PimIndexMaintenanceSvc_8561415
- PrintWorkflowUserSvc_8561415
- UnistoreSvc_8561415
- UserDataSvc_8561415
- WpnUserService_8561415
上記のサービス(短い)名の番号サフィックス
$config[ads_text6] not found8561415
は、他のWindows 10コンピューターでは同じでない場合があります。 これは、別のWindows 10コンピューターに設定を復元するときに注意する必要がある1つのことです。 また、SC.exeコマンドを使用してこれらのサービスを復元すると、エラーChangeServiceConfig FAILED 87:パラメータが正しくありません 。
古いバージョンのWindowsの場合
Windows 10より前のWindowsバージョン(Windows VistaからWindows 8.1)では、services_conf_backup.zipスクリプトを使用します。 WMIの制限により、古いスクリプトは自動(遅延開始)開始タイプをサポートしないことに注意してください。 自動と自動(遅延開始)を同じものとして扱います。