Merge remote-tracking branch 'upstream/dev' into dev
This commit is contained in:
commit
b669b221f9
7 changed files with 142 additions and 34 deletions
|
|
@ -64,12 +64,24 @@ class NotInstalledError(Exception):
|
|||
class NoProfilesError(Exception):
|
||||
pass
|
||||
|
||||
class OSInstalledLegacyError(Exception):
|
||||
pass
|
||||
|
||||
class PathNotFoundError(Exception):
|
||||
pass
|
||||
|
||||
class UnsupportedOSError(Exception):
|
||||
pass
|
||||
|
||||
class SecureBootDisabledError(Exception):
|
||||
pass
|
||||
|
||||
class SecureBootNotAvailError(Exception):
|
||||
pass
|
||||
|
||||
class SecureBootUnknownError(Exception):
|
||||
pass
|
||||
|
||||
# General functions
|
||||
def abort():
|
||||
"""Abort script."""
|
||||
|
|
@ -271,7 +283,7 @@ def human_readable_size(size, decimals=0):
|
|||
units = 'Kb'
|
||||
else:
|
||||
units = ' b'
|
||||
|
||||
|
||||
# Return
|
||||
return '{size:>{width}.{decimals}f} {units}'.format(
|
||||
size=size, width=width, decimals=decimals, units=units)
|
||||
|
|
@ -462,7 +474,7 @@ def run_program(cmd, args=[], check=True, pipe=True, shell=False):
|
|||
|
||||
def set_title(title='~Some Title~'):
|
||||
"""Set title.
|
||||
|
||||
|
||||
Used for window title and menu titles."""
|
||||
global_vars['Title'] = title
|
||||
os.system('title {}'.format(title))
|
||||
|
|
@ -566,7 +578,7 @@ def try_and_print(message='Trying...',
|
|||
|
||||
def upload_crash_details():
|
||||
"""Upload log and runtime data to the CRASH_SERVER.
|
||||
|
||||
|
||||
Intended for uploading to a public Nextcloud share."""
|
||||
if not ENABLED_UPLOAD_DATA:
|
||||
raise GenericError
|
||||
|
|
@ -648,7 +660,7 @@ def init_global_vars():
|
|||
def check_os():
|
||||
"""Set OS specific variables."""
|
||||
tmp = {}
|
||||
|
||||
|
||||
# Query registry
|
||||
path = r'SOFTWARE\Microsoft\Windows NT\CurrentVersion'
|
||||
with winreg.OpenKey(HKLM, path) as key:
|
||||
|
|
@ -697,7 +709,7 @@ def check_os():
|
|||
tmp['DisplayName'] = '{} x{}'.format(tmp['Name'], tmp['Arch'])
|
||||
if tmp['Notes']:
|
||||
tmp['DisplayName'] += ' ({})'.format(tmp['Notes'])
|
||||
|
||||
|
||||
global_vars['OS'] = tmp
|
||||
|
||||
def check_tools():
|
||||
|
|
@ -714,7 +726,7 @@ def check_tools():
|
|||
|
||||
def clean_env_vars():
|
||||
"""Remove conflicting global_vars and env variables.
|
||||
|
||||
|
||||
This fixes an issue where both global_vars and
|
||||
global_vars['Env'] are expanded at the same time."""
|
||||
for key in global_vars.keys():
|
||||
|
|
@ -768,7 +780,7 @@ def set_common_vars():
|
|||
|
||||
def set_linux_vars():
|
||||
"""Set common variables in a Linux environment.
|
||||
|
||||
|
||||
These assume we're running under a WK-Linux build."""
|
||||
result = run_program(['mktemp', '-d'])
|
||||
global_vars['TmpDir'] = result.stdout.decode().strip()
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
# Wizard Kit: Functions - Diagnostics
|
||||
|
||||
import ctypes
|
||||
|
||||
from functions.common import *
|
||||
|
||||
# STATIC VARIABLES
|
||||
|
|
@ -30,12 +32,59 @@ def check_connection():
|
|||
result = try_and_print(message='Ping test...', function=ping, cs='OK')
|
||||
if result['CS']:
|
||||
break
|
||||
if not ask('ERROR: System appears offline, try again?'):
|
||||
if ask('Continue anyway?'):
|
||||
break
|
||||
else:
|
||||
abort()
|
||||
|
||||
def check_secure_boot_status():
|
||||
"""Checks UEFI Secure Boot status via PowerShell."""
|
||||
boot_mode = get_boot_mode()
|
||||
cmd = ['PowerShell', '-Command', 'Confirm-SecureBootUEFI']
|
||||
result = run_program(cmd, check=False)
|
||||
|
||||
# Check results
|
||||
if result.returncode == 0:
|
||||
out = result.stdout.decode()
|
||||
if 'True' in out:
|
||||
# It's on, do nothing
|
||||
return
|
||||
elif 'False' in out:
|
||||
raise SecureBootDisabledError
|
||||
else:
|
||||
if not ask('ERROR: System appears offline, try again?'):
|
||||
if ask('Continue anyway?'):
|
||||
break
|
||||
else:
|
||||
abort()
|
||||
raise SecureBootUnknownError
|
||||
else:
|
||||
if boot_mode != 'UEFI':
|
||||
raise OSInstalledLegacyError
|
||||
else:
|
||||
# Check error message
|
||||
err = result.stderr.decode()
|
||||
if 'Cmdlet not supported' in err:
|
||||
raise SecureBootNotAvailError
|
||||
else:
|
||||
raise GenericError
|
||||
|
||||
def get_boot_mode():
|
||||
"""Check if Windows is booted in UEFI or Legacy mode, returns str."""
|
||||
kernel = ctypes.windll.kernel32
|
||||
firmware_type = ctypes.c_uint()
|
||||
|
||||
# Get value from kernel32 API
|
||||
try:
|
||||
kernel.GetFirmwareType(ctypes.byref(firmware_type))
|
||||
except:
|
||||
# Just set to zero
|
||||
firmware_type = ctypes.c_uint(0)
|
||||
|
||||
# Set return value
|
||||
type_str = 'Unknown'
|
||||
if firmware_type.value == 1:
|
||||
type_str = 'Legacy'
|
||||
elif firmware_type.value == 2:
|
||||
type_str = 'UEFI'
|
||||
|
||||
return type_str
|
||||
|
||||
def run_autoruns():
|
||||
"""Run AutoRuns in the background with VirusTotal checks enabled."""
|
||||
|
|
@ -61,11 +110,22 @@ def run_hwinfo_sensors():
|
|||
f.write('SummaryOnly=0\n')
|
||||
popen_program(global_vars['Tools']['HWiNFO'])
|
||||
|
||||
def run_nircmd(*cmd):
|
||||
"""Run custom NirCmd."""
|
||||
extract_item('NirCmd', silent=True)
|
||||
cmd = [global_vars['Tools']['NirCmd'], *cmd]
|
||||
run_program(cmd, check=False)
|
||||
|
||||
def run_xmplay():
|
||||
"""Run XMPlay to test audio."""
|
||||
extract_item('XMPlay', silent=True)
|
||||
cmd = [global_vars['Tools']['XMPlay'],
|
||||
r'{BinDir}\XMPlay\music.7z'.format(**global_vars)]
|
||||
|
||||
# Unmute audio first
|
||||
run_nircmd(['mutesysvolume', '0'])
|
||||
|
||||
# Open XMPlay
|
||||
popen_program(cmd)
|
||||
|
||||
def run_hitmanpro():
|
||||
|
|
|
|||
|
|
@ -435,6 +435,29 @@ def update_hwinfo():
|
|||
# Cleanup
|
||||
remove_from_temp('HWiNFO.zip')
|
||||
|
||||
def update_nircmd():
|
||||
# Stop running processes
|
||||
for exe in ['nircmdc.exe', 'nircmdc64.exe']:
|
||||
kill_process(exe)
|
||||
|
||||
# Remove existing folders
|
||||
remove_from_kit('NirCmd')
|
||||
|
||||
# Download
|
||||
download_to_temp('nircmd32.zip', SOURCE_URLS['NirCmd32'])
|
||||
download_to_temp('nircmd64.zip', SOURCE_URLS['NirCmd64'])
|
||||
|
||||
# Extract files
|
||||
extract_temp_to_cbin('nircmd64.zip', 'NirCmd', sz_args=['nircmdc.exe'])
|
||||
shutil.move(
|
||||
r'{}\NirCmd\nircmdc.exe'.format(global_vars['CBinDir']),
|
||||
r'{}\NirCmd\nircmdc64.exe'.format(global_vars['CBinDir']))
|
||||
extract_temp_to_cbin('nircmd32.zip', 'NirCmd', sz_args=['nircmdc.exe'])
|
||||
|
||||
# Cleanup
|
||||
remove_from_temp('nircmd32.zip')
|
||||
remove_from_temp('nircmd64.zip')
|
||||
|
||||
def update_produkey():
|
||||
# Stop running processes
|
||||
for exe in ['ProduKey.exe', 'ProduKey64.exe']:
|
||||
|
|
@ -590,7 +613,7 @@ def update_office():
|
|||
include_path = r'{}\_include\_Office'.format(global_vars['CBinDir'])
|
||||
if os.path.exists(include_path):
|
||||
shutil.copytree(include_path, dest)
|
||||
|
||||
|
||||
for year in ['2016']:
|
||||
# Download and extract
|
||||
name = 'odt{}.exe'.format(year)
|
||||
|
|
@ -605,7 +628,7 @@ def update_office():
|
|||
shutil.move(
|
||||
r'{}\{}'.format(global_vars['TmpDir'], year),
|
||||
r'{}\_Office\{}'.format(global_vars['CBinDir'], year))
|
||||
|
||||
|
||||
# Cleanup
|
||||
remove_from_temp('odt{}.exe'.format(year))
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,8 @@ SOURCE_URLS = {
|
|||
'Intel SSD Toolbox': r'https://downloadmirror.intel.com/27656/eng/Intel%20SSD%20Toolbox%20-%20v3.5.2.exe',
|
||||
'IOBit_Uninstaller': 'https://portableapps.duckduckgo.com/IObitUninstallerPortable_7.5.0.7.paf.exe',
|
||||
'KVRT': 'http://devbuilds.kaspersky-labs.com/devbuilds/KVRT/latest/full/KVRT.exe',
|
||||
'NirCmd32': 'https://www.nirsoft.net/utils/nircmd.zip',
|
||||
'NirCmd64': 'https://www.nirsoft.net/utils/nircmd-x64.zip',
|
||||
'NotepadPlusPlus': 'https://notepad-plus-plus.org/repository/7.x/7.5.8/npp.7.5.8.bin.minimalist.7z',
|
||||
'Office Deployment Tool 2016': 'https://download.microsoft.com/download/2/7/A/27AF1BE6-DD20-4CB4-B154-EBAB8A7D4A7E/officedeploymenttool_10810.33603.exe',
|
||||
'ProduKey32': 'http://www.nirsoft.net/utils/produkey.zip',
|
||||
|
|
@ -195,7 +197,6 @@ RST_SOURCES = {
|
|||
'SetupRST_16.5.exe': 'https://downloadmirror.intel.com/27984/eng/SetupRST.exe',
|
||||
}
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
print("This file is not meant to be called directly.")
|
||||
|
||||
|
|
|
|||
|
|
@ -30,6 +30,9 @@ TOOLS = {
|
|||
'64': r'HWiNFO\HWiNFO64.exe'},
|
||||
'KVRT': {
|
||||
'32': r'KVRT\KVRT.exe'},
|
||||
'NirCmd': {
|
||||
'32': r'NirCmd\nircmdc.exe',
|
||||
'64': r'NirCmd\nircmdc64.exe'},
|
||||
'NotepadPlusPlus': {
|
||||
'32': r'NotepadPlusPlus\notepadplusplus.exe'},
|
||||
'ProduKey': {
|
||||
|
|
|
|||
|
|
@ -25,11 +25,17 @@ if __name__ == '__main__':
|
|||
ticket_number = get_ticket_number()
|
||||
other_results = {
|
||||
'Error': {
|
||||
'CalledProcessError': 'Unknown Error',
|
||||
'BIOSKeyNotFoundError': 'BIOS key not found',
|
||||
'FileNotFoundError': 'File not found',
|
||||
'BIOSKeyNotFoundError': 'BIOS key not found',
|
||||
'CalledProcessError': 'Unknown Error',
|
||||
'FileNotFoundError': 'File not found',
|
||||
'GenericError': 'Unknown Error',
|
||||
'SecureBootDisabledError': 'Disabled',
|
||||
},
|
||||
'Warning': {}}
|
||||
'Warning': {
|
||||
'OSInstalledLegacyError': 'OS installed Legacy',
|
||||
'SecureBootNotAvailError': 'Not available',
|
||||
'SecureBootUnknownError': 'Unknown',
|
||||
}}
|
||||
if ENABLED_TICKET_NUMBERS:
|
||||
print_info('Starting System Checklist for Ticket #{}\n'.format(
|
||||
ticket_number))
|
||||
|
|
@ -82,6 +88,8 @@ if __name__ == '__main__':
|
|||
try_and_print(message='BIOS Activation:',
|
||||
function=activate_with_bios,
|
||||
other_results=other_results)
|
||||
try_and_print(message='Secure Boot Status:',
|
||||
function=check_secure_boot_status, other_results=other_results)
|
||||
try_and_print(message='Installed RAM:',
|
||||
function=show_installed_ram, ns='Unknown', silent_function=False)
|
||||
show_free_space()
|
||||
|
|
|
|||
|
|
@ -18,23 +18,23 @@ if __name__ == '__main__':
|
|||
'Error': {
|
||||
'CalledProcessError': 'Unknown Error',
|
||||
}}
|
||||
|
||||
|
||||
## Prep ##
|
||||
update_sdio = ask('Update SDI Origin?')
|
||||
|
||||
|
||||
## Download ##
|
||||
print_success('Downloading tools')
|
||||
|
||||
|
||||
# Data Recovery
|
||||
print_info(' Data Recovery')
|
||||
try_and_print(message='TestDisk / PhotoRec...', function=update_testdisk, other_results=other_results, width=40)
|
||||
|
||||
|
||||
# Data Transfers
|
||||
print_info(' Data Transfers')
|
||||
try_and_print(message='FastCopy...', function=update_fastcopy, other_results=other_results, width=40)
|
||||
try_and_print(message='wimlib...', function=update_wimlib, other_results=other_results, width=40)
|
||||
try_and_print(message='XYplorer...', function=update_xyplorer, other_results=other_results, width=40)
|
||||
|
||||
|
||||
# Diagnostics
|
||||
print_info(' Diagnostics')
|
||||
try_and_print(message='AIDA64...', function=update_aida64, other_results=other_results, width=40)
|
||||
|
|
@ -44,8 +44,9 @@ if __name__ == '__main__':
|
|||
try_and_print(message='ERUNT...', function=update_erunt, other_results=other_results, width=40)
|
||||
try_and_print(message='HitmanPro...', function=update_hitmanpro, other_results=other_results, width=40)
|
||||
try_and_print(message='HWiNFO...', function=update_hwinfo, other_results=other_results, width=40)
|
||||
try_and_print(message='NirCmd...', function=update_nircmd, other_results=other_results, width=40)
|
||||
try_and_print(message='ProduKey...', function=update_produkey, other_results=other_results, width=40)
|
||||
|
||||
|
||||
# Drivers
|
||||
print_info(' Drivers')
|
||||
try_and_print(message='Intel RST...', function=update_intel_rst, other_results=other_results, width=40)
|
||||
|
|
@ -53,14 +54,14 @@ if __name__ == '__main__':
|
|||
try_and_print(message='Samsing Magician...', function=update_samsung_magician, other_results=other_results, width=40)
|
||||
if update_sdio:
|
||||
try_and_print(message='Snappy Driver Installer Origin...', function=update_sdi_origin, other_results=other_results, width=40)
|
||||
|
||||
|
||||
# Installers
|
||||
print_info(' Installers')
|
||||
try_and_print(message='Adobe Reader DC...', function=update_adobe_reader_dc, other_results=other_results, width=40)
|
||||
try_and_print(message='MS Office...', function=update_office, other_results=other_results, width=40)
|
||||
try_and_print(message='Visual C++ Runtimes...', function=update_vcredists, other_results=other_results, width=40)
|
||||
update_all_ninite(other_results=other_results, width=40)
|
||||
|
||||
|
||||
# Misc
|
||||
print_info(' Misc')
|
||||
try_and_print(message='Caffeine...', function=update_caffeine, other_results=other_results, width=40)
|
||||
|
|
@ -72,7 +73,7 @@ if __name__ == '__main__':
|
|||
try_and_print(message='Notepad++...', function=update_notepadplusplus, other_results=other_results, width=40)
|
||||
try_and_print(message='WizTree...', function=update_wiztree, other_results=other_results, width=40)
|
||||
try_and_print(message='XMPlay...', function=update_xmplay, other_results=other_results, width=40)
|
||||
|
||||
|
||||
# Repairs
|
||||
print_info(' Repairs')
|
||||
try_and_print(message='AdwCleaner...', function=update_adwcleaner, other_results=other_results, width=40)
|
||||
|
|
@ -84,11 +85,11 @@ if __name__ == '__main__':
|
|||
# Uninstallers
|
||||
print_info(' Uninstallers')
|
||||
try_and_print(message='IObit Uninstaller...', function=update_iobit_uninstaller, other_results=other_results, width=40)
|
||||
|
||||
|
||||
## Review ##
|
||||
print_standard('Please review the results and download/extract any missing items to .cbin')
|
||||
pause('Press Enter to compress the .cbin items')
|
||||
|
||||
|
||||
## Compress ##
|
||||
print_success('Compressing tools')
|
||||
print_info(' _Drivers')
|
||||
|
|
@ -109,12 +110,12 @@ if __name__ == '__main__':
|
|||
other_results = other_results,
|
||||
width=40,
|
||||
item = item)
|
||||
|
||||
|
||||
## Search for network Office/QuickBooks installers & add to LAUNCHERS
|
||||
print_success('Scanning for network installers')
|
||||
scan_for_net_installers(OFFICE_SERVER, 'Office', min_year=2010)
|
||||
scan_for_net_installers(QUICKBOOKS_SERVER, 'QuickBooks', min_year=2015)
|
||||
|
||||
|
||||
## Generate Launchers
|
||||
print_success('Generating launchers')
|
||||
for section in sorted(LAUNCHERS.keys()):
|
||||
|
|
@ -123,7 +124,7 @@ if __name__ == '__main__':
|
|||
try_and_print(message=name, function=generate_launcher,
|
||||
section=section, name=name, options=options,
|
||||
other_results=other_results, width=40)
|
||||
|
||||
|
||||
# Rename "Copy WizardKit.cmd" (if necessary)
|
||||
source = r'{}\Scripts\Copy WizardKit.cmd'.format(global_vars['BinDir'])
|
||||
dest = r'{}\Copy {}.cmd'.format(global_vars['BaseDir'], KIT_NAME_FULL)
|
||||
|
|
@ -133,7 +134,7 @@ if __name__ == '__main__':
|
|||
except Exception:
|
||||
print_error(' Failed to rename "{}.cmd" to "{}.cmd"'.format(
|
||||
'Copy WizardKit', KIT_NAME_FULL))
|
||||
|
||||
|
||||
# Done
|
||||
print_standard('\nDone.')
|
||||
pause("Press Enter to exit...")
|
||||
|
|
|
|||
Loading…
Reference in a new issue