# Wizard Kit: Functions - Setup from functions.update import * from settings.setup import * from settings.sources import * # Configuration def config_classicstart(): """Configure ClassicStart.""" # User level, not system level cs_exe = r'{PROGRAMFILES}\Classic Shell\ClassicStartMenu.exe'.format( **global_vars['Env']) skin = r'{PROGRAMFILES}\Classic Shell\Skins\Metro-Win10-Black.skin7'.format( **global_vars['Env']) extract_item('ClassicStartSkin', silent=True) # Stop Classic Start run_program([cs_exe, '-exit'], check=False) sleep(1) kill_process('ClassicStartMenu.exe') # Configure write_registry_settings(SETTINGS_CLASSIC_START, all_users=False) if global_vars['OS']['Version'] == '10' and os.path.exists(skin): # Enable Win10 theme if on Win10 key_path = r'Software\IvoSoft\ClassicStartMenu\Settings' with winreg.OpenKey(HKCU, key_path, access=winreg.KEY_WRITE) as key: winreg.SetValueEx( key, 'SkinW7', 0, winreg.REG_SZ, 'Metro-Win10-Black') winreg.SetValueEx(key, 'SkinVariationW7', 0, winreg.REG_SZ, '') # Pin Browser to Start Menu (Classic) firefox = r'{PROGRAMDATA}\Start Menu\Programs\Mozilla Firefox.lnk'.format( **global_vars['Env']) chrome = r'{PROGRAMDATA}\Start Menu\Programs\Google Chrome.lnk'.format( **global_vars['Env']) dest_path = r'{APPDATA}\ClassicShell\Pinned'.format(**global_vars['Env']) source = None dest = None if os.path.exists(firefox): source = firefox dest = r'{}\Mozilla Firefox.lnk'.format(dest_path) elif os.path.exists(chrome): source = chrome dest = r'{}\Google Chrome.lnk'.format(dest_path) if source: try: os.makedirs(dest_path, exist_ok=True) shutil.copy(source, dest) except Exception: pass # Meh, it's fine without # (Re)start Classic Start run_program([cs_exe, '-exit'], check=False) sleep(1) kill_process('ClassicStartMenu.exe') sleep(1) popen_program(cs_exe) def config_explorer_system(): """Configure Windows Explorer for all users.""" write_registry_settings(SETTINGS_EXPLORER_SYSTEM, all_users=True) def config_explorer_user(): """Configure Windows Explorer for current user.""" write_registry_settings(SETTINGS_EXPLORER_USER, all_users=False) def config_windows_updates(): """Configure Windows updates.""" write_registry_settings(SETTINGS_WINDOWS_UPDATES, all_users=True) def create_system_restore_point(): """Create system restore point.""" cmd = [ 'PowerShell', '-Command', 'Checkpoint-Computer', '-Description', '1201-Checklist', ] run_program(cmd) def disable_windows_telemetry(): """Disable Windows 10 telemetry settings with O&O ShutUp10.""" extract_item('ShutUp10', silent=True) cmd = [ r'{BinDir}\ShutUp10\OOSU10.exe'.format(**global_vars), r'{BinDir}\ShutUp10\1201.cfg'.format(**global_vars), '/quiet'] run_program(cmd) def enable_regback(): """Enable RegBack.""" write_registry_settings(SETTINGS_REGBACK, all_users=True) def enable_mini_dumps(): """Configure Windows to save mini dumps during BSoDs.""" cmd = ['wmic', 'RECOVEROS', 'set', 'DebugInfoType', '=', '3'] run_program(cmd) def enable_system_restore(): """Enable System Restore and set disk usage to 8%""" cmd = [ 'PowerShell', '-Command', 'Enable-ComputerRestore', '-Drive', '{}\\'.format(global_vars['Env']['SYSTEMDRIVE'])] run_program(cmd) # Set disk usage cmd = [ r'{}\System32\vssadmin.exe'.format(global_vars['Env']['SYSTEMROOT']), 'resize', 'shadowstorage', '/on={}'.format(global_vars['Env']['SYSTEMDRIVE']), '/for={}'.format(global_vars['Env']['SYSTEMDRIVE']), '/maxsize=8%'] run_program(cmd) def update_clock(): """Set Timezone and sync clock.""" run_program(['tzutil' ,'/s', WINDOWS_TIME_ZONE], check=False) run_program(['net', 'stop', 'w32ime'], check=False) run_program( ['w32tm', '/config', '/syncfromflags:manual', '/manualpeerlist:"us.pool.ntp.org time.nist.gov time.windows.com"', ], check=False) run_program(['net', 'start', 'w32ime'], check=False) run_program(['w32tm', '/resync', '/nowait'], check=False) def write_registry_settings(settings, all_users=False): """Write registry values from custom dict of dicts.""" hive = HKCU if all_users: hive = HKLM for k, v in settings.items(): # CreateKey access = winreg.KEY_WRITE if 'WOW64_32' in v: access = access | winreg.KEY_WOW64_32KEY winreg.CreateKeyEx(hive, k, 0, access) # Create values with winreg.OpenKeyEx(hive, k, 0, access) as key: for name, value in v.get('DWORD Items', {}).items(): winreg.SetValueEx(key, name, 0, winreg.REG_DWORD, value) for name, value in v.get('SZ Items', {}).items(): winreg.SetValueEx(key, name, 0, winreg.REG_SZ, value) # Installations def install_adobe_reader(): """Install Adobe Reader.""" cmd = [ r'{BaseDir}\Installers\Extras\Office\Adobe Reader DC.exe'.format( **global_vars), '/sAll', '/msi', '/norestart', '/quiet', 'ALLUSERS=1', 'EULA_ACCEPT=YES'] run_program(cmd) def install_chrome_extensions(): """Install Google Chrome extensions for all users.""" write_registry_settings(SETTINGS_GOOGLE_CHROME, all_users=True) def install_classicstart_skin(): """Extract ClassicStart skin to installation folder.""" if global_vars['OS']['Version'] not in ('8', '8.1', '10'): raise UnsupportedOSError extract_item('ClassicStartSkin', silent=True) source = r'{BinDir}\ClassicStartSkin\Metro-Win10-Black.skin7'.format( **global_vars) dest_path = r'{PROGRAMFILES}\Classic Shell\Skins'.format( **global_vars['Env']) dest = r'{}\Metro-Win10-Black.skin7'.format(dest_path) os.makedirs(dest_path, exist_ok=True) shutil.copy(source, dest) def install_eset_nod32_av(scan_pups=True): """Install ESET NOD32 AV with custom config.""" extract_item('ESETConfigs', silent=True) config_file = r'{BinDir}\ESETConfigs\{config_file}.xml'.format( config_file='eset-config' if scan_pups else 'eset-config-no-pup', **global_vars) # Apply user configuration write_registry_settings(SETTINGS_ESET, all_users=False) # Download result = try_and_print(message='Downloading Setup...', cs='Done', other_results=OTHER_RESULTS, function=download_generic, out_dir=global_vars['ClientDir'], out_name='eav_nt64.exe', source_url=SOURCE_URLS['ESET NOD32 AV']) installer = r'{ClientDir}\eav_nt64.exe'.format(**global_vars) if not result['CS']: raise GenericError('Failed to download ESET NOD32 AV') # Install cmd = [installer, '--silent', '--accepteula', '--msi-property', 'PRODUCTTYPE=eav', 'PRODUCT_LANG=1033', 'PRODUCT_LANG_CODE=en-US', 'ADMINCFG="{}"'.format(config_file)] try_and_print(message='Installing ESET NOD32 AV...', other_results=OTHER_RESULTS, function=run_program, cmd=cmd) # Delete installer remove_item(installer) def install_firefox_extensions(): """Install Firefox extensions for all users.""" dist_path = r'{PROGRAMFILES}\Mozilla Firefox\distribution\extensions'.format( **global_vars['Env']) source_path = r'{CBinDir}\FirefoxExtensions.7z'.format(**global_vars) if not os.path.exists(source_path): raise FileNotFoundError # Update registry write_registry_settings(SETTINGS_MOZILLA_FIREFOX_32, all_users=True) write_registry_settings(SETTINGS_MOZILLA_FIREFOX_64, all_users=True) # Extract extension(s) to distribution folder cmd = [ global_vars['Tools']['SevenZip'], 'e', '-aos', '-bso0', '-bse0', '-p{ArchivePassword}'.format(**global_vars), '-o{dist_path}'.format(dist_path=dist_path), source_path] run_program(cmd) def install_ninite_bundle(mse=False, libreoffice=False): """Run Ninite installer(s), returns list of Popen objects.""" popen_objects = [] if global_vars['OS']['Version'] in ('8', '8.1', '10'): # Modern selection popen_objects.append( popen_program(r'{BaseDir}\Installers\Extras\Bundles\Modern.exe'.format( **global_vars))) else: # Legacy selection if mse: cmd = r'{BaseDir}\Installers\Extras\Security'.format(**global_vars) cmd += r'\Microsoft Security Essentials.exe' popen_objects.append(popen_program(cmd)) popen_objects.append( popen_program(r'{BaseDir}\Installers\Extras\Bundles\Legacy.exe'.format( **global_vars))) # LibreOffice if libreoffice: cmd = r'{BaseDir}\Installers\Extras\Office'.format(**global_vars) cmd += r'\LibreOffice.exe' popen_objects.append(popen_program(cmd)) # Done return popen_objects def install_vcredists(): """Install all supported Visual C++ runtimes.""" extract_item('_vcredists', silent=True) prev_dir = os.getcwd() try: os.chdir(r'{BinDir}\_vcredists'.format(**global_vars)) except FileNotFoundError: # Ignored since the loop below will report the errors pass for vcr in VCR_REDISTS: try_and_print(message=vcr['Name'], function=run_program, cmd=vcr['Cmd'], other_results=OTHER_RESULTS) os.chdir(prev_dir) # Misc def open_device_manager(): popen_program(['mmc', 'devmgmt.msc']) def open_snappy_driver_origin(): cmd = r'{BinDir}\_Drivers\SDIO\SDIO.exe'.format(**global_vars) popen_program(cmd) def open_windows_activation(): popen_program(['slui']) def open_windows_updates(): popen_program(['control', '/name', 'Microsoft.WindowsUpdate']) def restart_explorer(): """Restart Explorer.""" kill_process('explorer.exe') sleep(2) kill_process('explorer.exe') if __name__ == '__main__': print("This file is not meant to be called directly.") # vim: sts=2 sw=2 ts=2