mirror of
				https://github.com/oSoWoSo/DistroHopper.git
				synced 2024-08-14 22:46:53 +00:00 
			
		
		
		
	Add script to retrieve Windows product keys
This commit is contained in:
		
							parent
							
								
									600ada52ae
								
							
						
					
					
						commit
						1b1bd84e6a
					
				
					 1 changed files with 85 additions and 0 deletions
				
			
		
							
								
								
									
										85
									
								
								windowskey
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										85
									
								
								windowskey
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,85 @@ | ||||||
|  | #!/usr/bin/env python3 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | import html.parser | ||||||
|  | import os | ||||||
|  | import sys | ||||||
|  | import urllib.request | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | """ | ||||||
|  | Download Windows product keys from MicroSoft | ||||||
|  | """ | ||||||
|  | 
 | ||||||
|  | key_page_url = "https://docs.microsoft.com/en-us/windows-server/get-started/kms-client-activation-keys" | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def usage(): | ||||||
|  |     script = os.path.basename(sys.argv[0]) | ||||||
|  |     message = f"""Usage: {script} [windows-version] | ||||||
|  | 
 | ||||||
|  | To specify the version of Windows you'd like, pass a string that matches the | ||||||
|  | name of the operating system you'd like to download. Case doesn't matter, so | ||||||
|  | you can use "windows 10" or "Windows 10". | ||||||
|  | 
 | ||||||
|  | e.g. | ||||||
|  | 
 | ||||||
|  |     {script} "Windows 10" | ||||||
|  |     {script} "enterprise" | ||||||
|  | 
 | ||||||
|  | """ | ||||||
|  |     print(message, file=sys.stderr) | ||||||
|  |     sys.exit(0) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def download_page(url): | ||||||
|  |     response = urllib.request.urlopen(url) | ||||||
|  |     return response.read().decode("utf-8") | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class WindowsKeyPageParser(html.parser.HTMLParser): | ||||||
|  |     def __init__(self, *, convert_charrefs=True): | ||||||
|  |         super().__init__(convert_charrefs=True) | ||||||
|  |         self.product_keys = {} | ||||||
|  |         self.parsing_os = False | ||||||
|  | 
 | ||||||
|  |     def handle_starttag(self, tag, attrs): | ||||||
|  |         self.parsing_os = tag == "td" | ||||||
|  | 
 | ||||||
|  |     def handle_endtag(self, tag): | ||||||
|  |         self.parsing_os = False | ||||||
|  | 
 | ||||||
|  |     def handle_data(self, data): | ||||||
|  |         if self.parsing_os: | ||||||
|  |             self.stash_table_cell(data) | ||||||
|  | 
 | ||||||
|  |     def stash_table_cell(self, data): | ||||||
|  |         if "Windows" in data: | ||||||
|  |             self.current_os = data | ||||||
|  |         else: | ||||||
|  |             product_key = data | ||||||
|  |             self.product_keys[self.current_os] = product_key | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def find_keys_for_all_versions(markup): | ||||||
|  |     parser = WindowsKeyPageParser() | ||||||
|  |     parser.feed(markup) | ||||||
|  |     return parser.product_keys | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | if __name__ == "__main__": | ||||||
|  |     try: | ||||||
|  |         arg = sys.argv[1] | ||||||
|  |     except IndexError: | ||||||
|  |         windows_version = "" | ||||||
|  |     else: | ||||||
|  |         if arg in ["-h", "--help"]: | ||||||
|  |             usage() | ||||||
|  |         windows_version = arg | ||||||
|  | 
 | ||||||
|  |     markup = download_page(key_page_url) | ||||||
|  |     product_keys = find_keys_for_all_versions(markup) | ||||||
|  | 
 | ||||||
|  |     for os_name, product_key in product_keys.items(): | ||||||
|  |         if windows_version.lower() in os_name.lower(): | ||||||
|  |             print(f"{os_name}: {product_key}") | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue