Teilen: Windows Update zurücksetzen
Veröffentlicht: 9. Juni 2022 - 14:10 Uhr
Hallo zusammen.
Ich möchte Ihnen ein kleines Paket vorstellen, das ich entwickelt habe, um einige Probleme mit WindowsUpdate zu lösen.
Tatsächlich handelt es sich um eine Zusammenstellung der wichtigsten Maßnahmen zur Fehlerbehebung bei einem fehlgeschlagenen WindowsUpdate.
Ergriffene Maßnahmen:
Aufrichtig,
Tom
Ich möchte Ihnen ein kleines Paket vorstellen, das ich entwickelt habe, um einige Probleme mit WindowsUpdate zu lösen.
Tatsächlich handelt es sich um eine Zusammenstellung der wichtigsten Maßnahmen zur Fehlerbehebung bei einem fehlgeschlagenen WindowsUpdate.
Ergriffene Maßnahmen:
- DNS-Flush
- Säuberungen:
- - "qmgr*.dat"-Dateien im Verzeichnis ALLUSERSPROFILE/Application Data/Microsoft/Network/Downloader
- - „qmgr*.dat“-Dateien in ALLUSERSPROFILE/Microsoft/Network/Downloader
- - Alle Dateien im Verzeichnis WINDIR/Logs/WindowsUpdate
- Gelöschte Ordner (diese werden beim Start des Windows Update-Dienstes wiederhergestellt):
- - WINDIR/Softwareverteilung
- - SYSTEM32/Catroot2
- Löschung des Registrierungsschlüssels:
- - HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate
- - HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\WindowsUpdate
- GPUPDATE (auf Maschinenebene)
- Setzen Sie den "Bits"-Dienst zurück
- Zurücksetzen des „Windows Update“-Dienstes
- Neuregistrierung einiger DLLs
- Winsock zurücksetzen
- Konfiguration des Dienststarts
- Starten Sie die Dienste gegebenenfalls neu
- Wenn Waptwua aktiv ist, deaktivieren Sie den Windows Update-Dienst
Code: Alle auswählen
def install():
print("Arrêt des services :")
Stop_Service_if_needed('bits',"- Background Intelligent Transfer Service (bits).")
Stop_Service_if_needed('wuauserv',"- Windows Update (wuauserv).")
Stop_Service_if_needed('appidsvc',"- Application Identity (appidsvc).")
Stop_Service_if_needed('cryptsvc',"- Cryptographic Services (cryptsvc).")
print("Flush DNS")
run("Ipconfig /flushdns")
dossier = makepath(os.environ.get('ALLUSERSPROFILE'),'Application Data','Microsoft','Network','Downloader')
if isdir(dossier):
fichiers = find_all_files(dossier,include_patterns='qmgr*.dat')
print('Purge des fichiers "qmgr*.dat" de ' + dossier)
for fichier in fichiers:
remove_file(fichier)
print("Suppression de : " + fichier)
dossier = makepath(os.environ.get('ALLUSERSPROFILE'),'Microsoft','Network','Downloader')
if isdir(dossier):
fichiers = find_all_files(dossier,include_patterns='qmgr*.dat')
print('Purge des fichiers "qmgr*.dat" de ' + dossier)
for fichier in fichiers:
remove_file(fichier)
print("Suppression de : " + fichier)
dossier = makepath(os.environ.get('WINDIR'),'Logs','WindowsUpdate')
if isdir(dossier):
fichiers = find_all_files(dossier)
print('Purge du dossier ' + dossier)
for fichier in fichiers:
remove_file(fichier)
print("Suppression de : " + fichier)
f_pending_xml = makepath(os.environ.get('WINDIR'),'winsxs','pending.xml')
if isfile(f_pending_xml + '.bak'):
remove_file(f_pending_xml + '.bak')
if isfile(f_pending_xml):
print("sauvegarde de " + f_pending_xml)
os.rename(f_pending_xml,f_pending_xml + '.bak')
dossier = makepath(os.environ.get('WINDIR'),'SoftwareDistribution')
if isdir(dossier):
print("Suppression de " + dossier)
remove_tree(dossier)
dossier = makepath(system32,'Catroot2')
if isdir(dossier):
print("Suppression de " + dossier)
remove_tree(dossier)
if reg_key_exists(HKEY_LOCAL_MACHINE,'SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate'):
print('Purge de la clé de registe : HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate')
registry_deletekey(HKEY_LOCAL_MACHINE,'SOFTWARE\Policies\Microsoft\Windows','WindowsUpdate')
if reg_key_exists(HKEY_LOCAL_MACHINE,'SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\WindowsUpdate'):
print('Purge de la clé de registe : HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\WindowsUpdate')
registry_deletekey(HKEY_LOCAL_MACHINE,'SOFTWARE\Microsoft\Windows\CurrentVersion\Policies','WindowsUpdate')
print("GPUPDATE (ordinateur)")
run('gpupdate /force /target:computer')
print('Reset du service "bits"')
run('sc.exe sdset bits D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)')
print('Reset du service "Windows Update"')
run('sc.exe sdset wuauserv D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)')
lst_dlls = ['atl.dll','urlmon.dll','mshtml.dll','shdocvw.dll','browseui.dll','jscript.dll','vbscript.dll','scrrun.dll','msxml.dll','msxml3.dll','msxml6.dll','actxprxy.dll','softpub.dll','wintrust.dll','dssenh.dll','rsaenh.dll','gpkcsp.dll','sccbase.dll','slbcsp.dll','cryptdlg.dll','oleaut32.dll','ole32.dll','shell32.dll','initpki.dll','wuapi.dll','wuaueng.dll','wuaueng1.dll','wucltui.dll','wups.dll','wups2.dll','wuweb.dll','qmgr.dll','qmgrprxy.dll','wucltux.dll','muweb.dll','wuwebv.dll','wudriver.dll']
print("Ré-enregistrement de quelques dlls.")
for f_dll in lst_dlls:
fichier = makepath(system32,f_dll)
run_notfatal('regsvr32.exe /s %s' % fichier)
print("Réinitialisation du winsock.")
run('netsh winsock reset')
run('netsh winsock reset proxy')
print("Configuration des services")
run_notfatal('sc config wuauserv start= auto')
run_notfatal('sc config bits start= auto ')
run_notfatal('sc config DcomLaunch start= auto')
print("Redémarrage des services selon leur propriété 'startup'")
Start_Service_if_needed('bits',"- Background Intelligent Transfer Service (bits).")
Start_Service_if_needed('wuauserv',"- Windows Update (wuauserv).")
Start_Service_if_needed('appidsvc',"- Application Identity (appidsvc).")
Start_Service_if_needed('cryptsvc',"- Cryptographic Services (cryptsvc).")
# Si WAPTwua est actif sur la cible, alors désactivation et arrêt du service Windows Update
if inifile_hassection(WAPT.config_filename,'waptwua'):
waptwua_setting = inifile_readstring(WAPT.config_filename,'waptwua','enabled')
if (waptwua_setting == 'True' or waptwua_setting == '1'):
print("Waptwua est activé sur ce poste.")
run_notfatal('sc config wuauserv start= disabled')
Stop_Service_if_needed('wuauserv',"- Désactivation et arrêt du service Windows Update.")
pass
# put here what to do when package is installed on host
# implicit context variables are WAPT, basedir, control, user, params, run
def Start_Service_if_needed(Service,DisplayInfo):
if service_installed(Service):
if not service_is_running(Service):
key = reg_openkey_noredir(HKEY_LOCAL_MACHINE,'SYSTEM\CurrentControlSet\Services\%s' % (Service),KEY_READ)
startup = reg_getvalue(key,'Start')
if startup == '2':
print(DisplayInfo)
service_start(Service)
def Stop_Service_if_needed(Service,DisplayInfo):
if service_installed(Service):
if service_is_running(Service):
print(DisplayInfo)
service_stop(Service)
Tom