diff --git a/scripts/auto_repairs.py b/scripts/auto_repairs.py index aabb9ba6..1cfb8da5 100644 --- a/scripts/auto_repairs.py +++ b/scripts/auto_repairs.py @@ -29,7 +29,7 @@ class MenuEntry(): # Set details self.details = { 'Function': function, - 'Selected': True, + 'Selected': False, **kwargs, } @@ -64,7 +64,7 @@ BASE_MENUS = { MenuEntry('Disable Windows Updates', 'auto_windows_updates_disable'), MenuEntry('Reset Windows Updates', 'auto_windows_updates_reset'), MenuEntry('Reboot', placeholder_reboot), - MenuEntry('CHKDSK', placeholder_function), + MenuEntry('CHKDSK', 'auto_chkdsk'), MenuEntry('DISM RestoreHealth', 'auto_dism'), MenuEntry('SFC Scan', placeholder_function), MenuEntry('Fix File Associations', placeholder_function), diff --git a/scripts/wk/repairs/win.py b/scripts/wk/repairs/win.py index 206683ea..31a661fe 100644 --- a/scripts/wk/repairs/win.py +++ b/scripts/wk/repairs/win.py @@ -369,6 +369,8 @@ def save_settings(group, name, result=None, **kwargs): 'failed': result['Failed'], 'message': result['Message'], }) + if isinstance(result['Exception'], GenericWarning): + kwargs['warning'] = True # Write values to registry for value_name, data in kwargs.items(): @@ -458,6 +460,31 @@ def auto_backup_registry(group, name): save_settings(group, name, result=result) +def auto_chkdsk(group, name): + """Run CHKDSK repairs.""" + needs_reboot = False + system_disk = os.environ.get('SYSTEMDRIVE', 'C:') + result = TRY_PRINT.run(f'CHKDSK ({system_disk})...', run_chkdsk_online) + + # Run offline CHKDSK if required + if result['Failed'] and 'Repaired' not in result['Message']: + needs_reboot = True + result = TRY_PRINT.run( + f'Scheduling offline CHKDSK ({system_disk})...', + run_chkdsk_offline, + ) + if not result['Failed']: + # Successfully set dirty bit to force offline check + # Set result['Failed'] to True because we failed to repair online + result['Failed'] = True + result['Message'] = 'Scheduled offline repairs' + + # Done + save_settings(group, name, result=result) + if needs_reboot: + reboot() + + def auto_dism(group, name): """Run DISM repairs.""" needs_reboot = False