diff --git a/docs/parsers/systeminfo.md b/docs/parsers/systeminfo.md new file mode 100644 index 00000000..b56fca72 --- /dev/null +++ b/docs/parsers/systeminfo.md @@ -0,0 +1,152 @@ + +# jc.parsers.systeminfo +jc - JSON CLI output utility `systeminfo` command output parser + +Parses Windows "systeminfo" command. Multiline values such as +hotfixes or network cards are unparsed. + +Usage (cli): + + $ systeminfo | jc --systeminfo + +Usage (module): + + import jc.parsers.systeminfo + result = jc.parsers.systeminfo.parse(systeminfo_command_output) + +Compatibility: + + 'win32' + +Examples: + + $ systeminfo | jc --systeminfo -p + { + "host_name": "DESKTOP-WIN01", + "os_name": "Microsoft Windows 10 Enterprise", + "os_version": "10.0.19042 N/A Build 19042", + "os_manufacturer": "Microsoft Corporation", + "os_configuration": "Member Workstation", + "os_build_type": "Multiprocessor Free", + "registered_owner": "User", + "registered_organization": "", + "product_id": "00111-12345-00001-AA111", + "original_install_date": "2/16/2021, 11:20:27 AM", + "system_boot_time": "3/19/2021, 9:25:03 AM", + "system_manufacturer": "VMware, Inc.", + "system_model": "VMware7,1", + "system_type": "x64-based PC", + "processors": "1 Processor(s) Installed. + [01]: ...", + "bios_version": "VMware, Inc. VMW71.00V.11111111.B64.2008100111, 8/10/2020", + "windows_directory": "C:\Windows", + "system_directory": "C:\Windows\system32", + "boot_device": "\Device\HarddiskVolume1", + "system_locale": "en-us;English (United States)", + "input_locale": "en-us;English (United States)", + "time_zone": "(UTC-08:00) Pacific Time (US & Canada)", + "total_physical_memory": "2,047 MB", + "available_physical_memory": "1,417 MB", + "virtual_memory_max_size": "2,687 MB", + "virtual_memory_available": "1,482 MB", + "virtual_memory_in_use": "1,205 MB", + "page_file_locations": "C:\pagefile.sys", + "domain": "TEST.local", + "logon_server": "\\WIN-AA1A1A11AAA", + "hotfixs": "6 Hotfix(s) Installed. + [01]: KB4578...", + "network_cards": "1 NIC(s) Installed. + [01]: Int...", + "hyperv_requirements": "A hypervisor has been detected. Features required fo..." + } + + +## info +```python +info() +``` + + +## process +```python +process(proc_data) +``` + +Final processing to conform to the schema. + +Parameters: + + proc_data: (List of Dictionaries) raw structured data to process + +Returns: + + List of Dictionaries. Some keys are optional. Example: a non-virtualized server will not have + the "hyperv_requirements" key. Structured data with the following schema: + + [ + { + "host_name": "string", + "os_name": "string", + "os_version": "string", + "os_manufacturer": "string", + "os_configuration": "string", + "os_build_type": "string", + "registered_owner": "string", + "registered_organization": "string", + "product_id": "string", + "original_install_date": "string", + "system_boot_time": "string", + "system_manufacturer": "string", + "system_model": "string", + "system_type": "string", + "processors": "string", + "bios_version": "string", + "windows_directory": "string", + "system_directory": "string", + "boot_device": "string", + "system_locale": "string", + "input_locale": "string", + "time_zone": "string", + "total_physical_memory": "string", + "available_physical_memory": "string", + "virtual_memory_max_size": "string", + "virtual_memory_available": "string", + "virtual_memory_in_use": "string", + "page_file_locations": "string", + "domain": "string", + "logon_server": "string", + "hotfixs": "string", + "network_cards": "string", + "hyperv_requirements": "string" + } + ] + + +## parse +```python +parse(data, raw=False, quiet=False) +``` + +Main text parsing function + +Parameters: + + data: (string) text data to parse + raw: (boolean) output preprocessed JSON if True + quiet: (boolean) suppress warning messages if True + +Returns: + + List of Dictionaries. Raw or processed structured data. + + +## get_value_pos +```python +get_value_pos(line, delim) +``` + +Finds the first non-whitespace character after the delimiter +Parameters: + line: (string) Input string + delim: (string) The data delimiter + diff --git a/jc/cli.py b/jc/cli.py index 18bc2a99..2d77b95f 100644 --- a/jc/cli.py +++ b/jc/cli.py @@ -97,6 +97,7 @@ parsers = [ 'systemctl-lj', 'systemctl-ls', 'systemctl-luf', + 'systeminfo', 'time', 'timedatectl', 'tracepath', diff --git a/jc/parsers/systeminfo.py b/jc/parsers/systeminfo.py new file mode 100644 index 00000000..8d649c3b --- /dev/null +++ b/jc/parsers/systeminfo.py @@ -0,0 +1,508 @@ +"""jc - JSON CLI output utility `systeminfo` command output parser + +Parses Windows "systeminfo" command. + +Usage (cli): + + $ systeminfo | jc --systeminfo + +Usage (module): + + import jc.parsers.systeminfo + result = jc.parsers.systeminfo.parse(systeminfo_command_output) + +Compatibility: + + 'win32' + +Examples: + + $ systeminfo | jc --systeminfo -p -r + { + "host_name": "DESKTOP-WIN01", + "os_name": "Microsoft Windows 10 Enterprise", + "os_version": "10.0.19042 N/A Build 19042", + "os_manufacturer": "Microsoft Corporation", + "os_configuration": "Member Workstation", + "os_build_type": "Multiprocessor Free", + "registered_owner": "User", + "registered_organization": "", + "product_id": "00111-12345-00001-AA111", + "original_install_date": "2/16/2021, 11:20:27 AM", + "system_boot_time": "3/19/2021, 9:25:03 AM", + "system_manufacturer": "VMware, Inc.", + "system_model": "VMware7,1", + "system_type": "x64-based PC", + "processors": ["Intel64 Family 6 Model 158 Stepping 13 GenuineIntel ~2400 Mhz"], + "bios_version": "VMware, Inc. VMW71.00V.11111111.B64.2008100111, 8/10/2020", + "windows_directory": "C:\\Windows", + "system_directory": "C:\\Windows\\system32", + "boot_device": "\\Device\\HarddiskVolume1", + "system_locale": "en-us;English (United States)", + "input_locale": "en-us;English (United States)", + "time_zone": "(UTC-08:00) Pacific Time (US & Canada)", + "total_physical_memory_mb": "2,047 MB", + "available_physical_memory_mb": "1,417 MB", + "virtual_memory_max_size_mb": "2,687 MB", + "virtual_memory_available_mb": "1,482 MB", + "virtual_memory_in_use_mb": "1,205 MB", + "page_file_locations": "C:\\pagefile.sys", + "domain": "TEST.local", + "logon_server": "\\\\WIN-AA1A1A11AAA", + "hotfixs": [ + "KB4578968", + "KB4562830", + "KB4570334", + "KB4580325", + "KB4586864", + "KB4594440" + ], + "network_cards": [ + { + "name": "Intel(R) 82574L Gigabit Network Connection", + "connection_name": "Ethernet0", + "status": "", + "dhcp_enabled": "Yes", + "dhcp_server": "192.168.133.250", + "ip_addresses": [ + "192.168.133.3", + "fe80::192:eb64:1fcf:86eb" + ] + } + ], + "hyperv_requirements": { + "vm_monitor_mode_extensions": "Yes", + "virtualization_enabled_in_firmware": "Yes", + "second_level_address_translation": "No", + "data_execution_prevention_available": "Yes" + } + } + + $ systeminfo | jc --systeminfo -p + { + "host_name": "DESKTOP-WIN01", + "os_name": "Microsoft Windows 10 Enterprise", + "os_version": "10.0.19042 N/A Build 19042", + "os_manufacturer": "Microsoft Corporation", + "os_configuration": "Member Workstation", + "os_build_type": "Multiprocessor Free", + "registered_owner": "User", + "registered_organization": "", + "product_id": "00111-12345-00001-AA111", + "original_install_date": 1613496027, + "system_boot_time": 1616163903, + "system_manufacturer": "VMware, Inc.", + "system_model": "VMware7,1", + "system_type": "x64-based PC", + "processors": ["Intel64 Family 6 Model 158 Stepping 13 GenuineIntel ~2400 Mhz"], + "bios_version": "VMware, Inc. VMW71.00V.11111111.B64.2008100111, 8/10/2020", + "windows_directory": "C:\\Windows", + "system_directory": "C:\\Windows\\system32", + "boot_device": "\\Device\\HarddiskVolume1", + "system_locale": "en-us;English (United States)", + "input_locale": "en-us;English (United States)", + "time_zone": "(UTC-08:00) Pacific Time (US & Canada)", + "total_physical_memory_mb": 2047, + "available_physical_memory_mb": 1417, + "virtual_memory_max_size_mb": 2687, + "virtual_memory_available_mb": 1482, + "virtual_memory_in_use_mb": 1205", + "page_file_locations": "C:\\pagefile.sys", + "domain": "TEST.local", + "logon_server": "\\\\WIN-AA1A1A11AAA", + "hotfixs": [ + "KB4578968", + "KB4562830", + "KB4570334", + "KB4580325", + "KB4586864", + "KB4594440" + ], + "network_cards": [ + { + "name": "Intel(R) 82574L Gigabit Network Connection", + "connection_name": "Ethernet0", + "status": "", + "dhcp_enabled": true, + "dhcp_server": "192.168.133.250", + "ip_addresses": [ + "192.168.133.3", + "fe80::192:eb64:1fcf:86eb" + ] + } + ], + "hyperv_requirements": { + "vm_monitor_mode_extensions": "Yes", + "virtualization_enabled_in_firmware": "Yes", + "second_level_address_translation": "No", + "data_execution_prevention_available": "Yes" + } + } +""" +import re +import jc.utils + + +class info: + version = "0.5 (beta)" + description = "Windows systeminfo command parser" + author = "Jon Smith" + author_email = "jon@rebelliondefense.com" + # details = 'enter any other details here' + + # compatible options: linux, darwin, cygwin, win32, aix, freebsd + compatible = ["win32"] + magic_commands = ["systeminfo"] + + +__version__ = info.version + + +def process(proc_data): + """ + Final processing to conform to the schema. + + Parameters: + + proc_data: (Dictionary) raw structured data to process + + Returns: + + Dictionary. Some keys are optional. Example: a system without hyper-v capabilities + will not have a 'hyperv_requirements' key, and a system already running hyper-v + will have an empty "hyperv_requirements" object. + + Structured data with the following schema: + + { + "host_name": "string", + "os_name": "string", + "os_version": "string", + "os_manufacturer": "string", + "os_configuration": "string", + "os_build_type": "string", + "registered_owner": "string", + "registered_organization": "string", + "product_id": "string", + "original_install_date": integer, # naive timestamp + "system_boot_time": integer, # naive timestamp + "system_manufacturer": "string", + "system_model": "string", + "system_type": "string", + "processors": ["string"], + "bios_version": "string", + "windows_directory": "string", + "system_directory": "string", + "boot_device": "string", + "system_locale": "string", + "input_locale": "string", + "time_zone": "string", + "total_physical_memory_mb": "string", + "available_physical_memory_mb": integer, + "virtual_memory_max_size_mb": integer, + "virtual_memory_available_mb": integer, + "virtual_memory_in_use_mb": integer, + "page_file_locations": "string", + "domain": "string", + "logon_server": "string", + "hotfixs": ["string"], + "network_cards": [ + { + "name": "string", + "connection_name": "string", + "status": "string", + "dhcp_enabled": boolean, + "dhcp_server": "string", + "ip_addresses": ["string"] + } + ], + "hyperv_requirements": { + "vm_monitor_mode_extensions": boolean, + "virtualization_enabled_in_firmware": boolean, + "second_level_address_translation": boolean, + "data_execution_prevention_available": boolean + } + } + """ + + # rebuild output for added semantic information + for i, nic in enumerate(proc_data["network_cards"]): + proc_data["network_cards"][i]["dhcp_enabled"] = convert_to_boolean( + nic["dhcp_enabled"] + ) + + int_list = [ + "total_physical_memory_mb", + "available_physical_memory_mb", + "virtual_memory_max_size_mb", + "virtual_memory_available_mb", + "virtual_memory_in_use_mb", + ] + for key in int_list: + proc_data[key] = convert_to_int(proc_data.get(key)) + + dt_list = ["original_install_date", "system_boot_time"] + for key in dt_list: + tz = proc_data.get("time_zone", "") + if tz: + # convert + # from: (UTC-08:00) Pacific Time (US & Canada) + # to: (UTC-0800) + tz_fields = tz.split(" ") + tz = " " + tz_fields[0].replace(":", "") + proc_data[key] = jc.utils.timestamp(f"{proc_data.get(key)}{tz}").naive + + hyperv_key = "hyperv_requirements" + hyperv_subkey_list = [ + "vm_monitor_mode_extensions", + "virtualization_enabled_in_firmware", + "second_level_address_translation", + "data_execution_prevention_available", + ] + if hyperv_key in proc_data: + for key in hyperv_subkey_list: + if key in proc_data[hyperv_key]: + proc_data[hyperv_key][key] = convert_to_boolean( + proc_data[hyperv_key][key] + ) + + return proc_data + + +def parse(data, raw=False, quiet=False): + """ + Main text parsing function + + Parameters: + + data: (string) text data to parse + raw: (boolean) output preprocessed JSON if True + quiet: (boolean) suppress warning messages if True + + Returns: + + List of Dictionaries. Raw or processed structured data. + """ + if not quiet: + jc.utils.compatibility(__name__, info.compatible) + + delim = ":" # k/v delimiter + raw_data = {} # intermediary output + + if jc.utils.has_data(data): + # keepends = True, so that multiline data retains return chars + lines = [line for line in data.splitlines(keepends=True) if line.strip() != ""] + + # find the character position of the value in the k/v pair of the first line + # all subsequent lines of data use the same character position + start_value_pos = get_value_pos(lines[0], delim) + + last_key = None + for line in lines: + key = line[0:start_value_pos] + value = line[start_value_pos:] + + # possible multiline data + if last_key: + # the value data doesn't start where it should + # so this is multiline data + if delim not in key: + raw_data[last_key] += line + continue + + raw_data[key] = value + last_key = key + + # clean up keys; strip values + raw_output = {} + for k, v in raw_data.items(): + k = transform_key(k) + + # since we split on start_value_pos, the delimiter + # is still in the key field. Remove it. + k = k.rstrip(delim) + + if k in ["hotfixs", "processors"]: + raw_output[k] = parse_hotfixs_or_processors(v) + elif k in ["network_cards"]: + raw_output[k] = parse_network_cards(v) + elif k in ["hyperv_requirements"]: + raw_output[k] = parse_hyperv_requirements(v) + elif k in [ + "total_physical_memory", + "available_physical_memory", + "virtual_memory_max_size", + "virtual_memory_available", + "virtual_memory_in_use" + ]: + raw_output[k + "_mb"] = v.strip() + else: + raw_output[k] = v.strip() + + if raw: + return raw_output + else: + return process(raw_output) + + +def parse_hotfixs_or_processors(data): + """ + Turns a list of return-delimited hotfixes or processors + with [x] as a prefix into an array of hotfixes + + Note that if a high number of items exist, the list may cutoff + and this list may not contain all items installed on the system + + IRL, this likely applies to hotfixes more than processors + + Parameters: + data: (string) Input string + """ + arr_output = [] + for i, l in enumerate(data.splitlines()): + # skip line that says how many are installed + if i == 0: + continue + # we have to make sure this is a complete line + # as data could cutoff. Make sure the delimiter + # exists. Otherwise, skip it. + if ":" in l: + k, v = l.split(":") + # discard the number sequence + arr_output.append(v.strip()) + + return arr_output + + +def parse_hyperv_requirements(data): + """ + Turns a list of key/value settings for hyperv + into an object + + Parameters: + data: (string) Input string + """ + output = {} + for i, l in enumerate(data.splitlines()): + if ":" in l: + k, v = l.split(":") + # discard the number sequence + output[transform_key(k)] = v.strip() + + return output + + +def parse_network_cards(data): + """ + Turns a list of network_cards into an array of objects + + Parameters: + data: (string) Input string + """ + delim = ":" + arr_output = [] + cur_nic = None + is_ip = False + nic_value_pos = 0 + + for i, line in enumerate(data.splitlines()): + # skip first line + if i == 0: + continue + + if "IP address(es)" in line: + is_ip = True + continue + + cur_value_pos = len(line) - len(line.lstrip()) + + line = line.strip() + + m = re.match(r"\[(\d+)\]" + delim + "(.+)", line) + if m and is_ip and cur_value_pos > nic_value_pos: + cur_nic["ip_addresses"].append(m.group(2).strip()) + elif m: + if cur_nic: + arr_output.append(cur_nic) + cur_nic = default_nic() + cur_nic["name"] = m.group(2).strip() + nic_value_pos = cur_value_pos + is_ip = False + elif delim in line: + k, v = line.split(delim) + k = transform_key(k) + cur_nic[k] = v.strip() + + if cur_nic: + arr_output.append(cur_nic) + + return arr_output + + +def convert_to_boolean(value): + """ + Converts string input to boolean assuming "Yes/No" inputs + + Parameters: + value: (string) Input value + """ + return value == "Yes" + + +def convert_to_int(value): + """ + Converts string input to integer by stripping all non-numeric characters + + Parameters: + value: (string) Input value + """ + try: + value = int(re.sub("[^0-9]", "", value)) + except ValueError: + pass + return value + + +def default_nic(): + """ + Returns a default network card object + """ + return { + "name": "", + "connection_name": "", + "status": "", + "dhcp_enabled": "No", + "dhcp_server": "", + "ip_addresses": [], + } + + +def get_value_pos(line, delim): + """ + Finds the first non-whitespace character after the delimiter + + Parameters: + line: (string) Input string + delim: (string) The data delimiter + """ + fields = line.split(delim, 1) + if not len(fields) == 2: + raise Exception(f"Expected a '{delim}' delimited field. Actual: {line}") + + return len(line) - len(fields[1].lstrip()) + + +def transform_key(key): + """ + Converts a given key to a valid json key that plays nice with jq + + Parameters: + key: (string) Input value + """ + # lowercase and replace spaces with underscores + key = key.strip().lower().replace(" ", "_") + + # remove invalid key characters + for c in ";:!@#$%^&*()-": + key = key.replace(c, "") + return key diff --git a/jc/utils.py b/jc/utils.py index c289625b..51164423 100644 --- a/jc/utils.py +++ b/jc/utils.py @@ -177,6 +177,7 @@ class timestamp: {'id': 8100, 'format': '%a %d %b %Y %H:%M:%S', 'locale': ''}, # current locale format with non-UTC tz (found in upower cli output): # mar. 23 mars 2021 19:12:11 EDT {'id': 8200, 'format': '%A %d %B %Y, %H:%M:%S UTC%z', 'locale': ''}, # fr_FR.utf8 locale format (found in date cli output): vendredi 26 mars 2021, 13:26:46 (UTC+0000) {'id': 8300, 'format': '%A %d %B %Y, %H:%M:%S', 'locale': ''}, # fr_FR.utf8 locale format with non-UTC tz (found in date cli output): vendredi 26 mars 2021, 13:26:46 (UTC-0400) + {'id': 8400, 'format': '%m/%d/%Y, %I:%M:%S %p', 'locale': ''}, # Windows english format (found in systeminfo cli output): 3/22/2021, 1:15:51 PM (UTC-0600) {'id': 9000, 'format': '%c', 'locale': ''} # locally configured locale format conversion: Could be anything :) this is a last-gasp attempt ] diff --git a/tests/fixtures/windows/windows-10/systeminfo-hyperv.json b/tests/fixtures/windows/windows-10/systeminfo-hyperv.json new file mode 100644 index 00000000..020e9c71 --- /dev/null +++ b/tests/fixtures/windows/windows-10/systeminfo-hyperv.json @@ -0,0 +1,111 @@ +{ + "host_name": "TESTLAPTOP", + "os_name": "Microsoft Windows 10 Enterprise", + "os_version": "10.0.17134 N/A Build 17134", + "os_manufacturer": "Microsoft Corporation", + "os_configuration": "Member Workstation", + "os_build_type": "Multiprocessor Free", + "registered_owner": "Test, Inc.", + "registered_organization": "Test, Inc.", + "product_id": "11111-11111-11111-AA111", + "original_install_date": 1553640690, + "system_boot_time": 1617110039, + "system_manufacturer": "Dell Inc.", + "system_model": "Precision 5530", + "system_type": "x64-based PC", + "processors": [ + "Intel64 Family 6 Model 158 Stepping 10 GenuineIntel ~2592 Mhz" + ], + "bios_version": "Dell Inc. 1.16.2, 4/21/2020", + "windows_directory": "C:\\WINDOWS", + "system_directory": "C:\\WINDOWS\\system32", + "boot_device": "\\Device\\HarddiskVolume2", + "system_locale": "en-us;English (United States)", + "input_locale": "en-us;English (United States)", + "time_zone": "(UTC-06:00) Central Time (US & Canada)", + "total_physical_memory_mb": 32503, + "available_physical_memory_mb": 19743, + "virtual_memory_max_size_mb": 37367, + "virtual_memory_available_mb": 22266, + "virtual_memory_in_use_mb": 15101, + "page_file_locations": "C:\\pagefile.sys", + "domain": "test.com", + "logon_server": "\\\\TESTDC01", + "hotfixs": [ + "KB2693643", + "KB4601054", + "KB4230204", + "KB4346084", + "KB4485449", + "KB4486153", + "KB4509094", + "KB4535680", + "KB4580325", + "KB4580398", + "KB4534293" + ], + "network_cards": [ + { + "name": "Intel(R) Wireless-AC 9260 160MHz", + "connection_name": "Wi-Fi", + "status": "", + "dhcp_enabled": true, + "dhcp_server": "192.168.2.1", + "ip_addresses": [ + "192.168.2.219" + ] + }, + { + "name": "Bluetooth Device (Personal Area Network)", + "connection_name": "Bluetooth Network Connection", + "status": "Media disconnected", + "dhcp_enabled": false, + "dhcp_server": "", + "ip_addresses": [] + }, + { + "name": "Microsoft KM-TEST Loopback Adapter", + "connection_name": "Npcap Loopback Adapter", + "status": "", + "dhcp_enabled": true, + "dhcp_server": "255.255.255.255", + "ip_addresses": [ + "169.254.161.245" + ] + }, + { + "name": "Cisco AnyConnect Secure Mobility Client Virtual Miniport Adapter for Windows x64", + "connection_name": "Ethernet 5", + "status": "Hardware not present", + "dhcp_enabled": false, + "dhcp_server": "", + "ip_addresses": [] + }, + { + "name": "Hyper-V Virtual Ethernet Adapter", + "connection_name": "vEthernet (InternalVM)", + "status": "", + "dhcp_enabled": false, + "dhcp_server": "", + "ip_addresses": [ + "172.16.32.1" + ] + }, + { + "name": "Hyper-V Virtual Ethernet Adapter", + "connection_name": "vEthernet (Default Switch) 2", + "status": "", + "dhcp_enabled": true, + "dhcp_server": "255.255.255.255", + "ip_addresses": [ + "172.26.251.65" + ] + } + ], + "hyperv_requirements": { + "vm_monitor_mode_extensions": true, + "virtualization_enabled_in_firmware": true, + "second_level_address_translation": false, + "data_execution_prevention_available": true + } +} diff --git a/tests/fixtures/windows/windows-10/systeminfo-hyperv.out b/tests/fixtures/windows/windows-10/systeminfo-hyperv.out new file mode 100644 index 00000000..cdf65798 --- /dev/null +++ b/tests/fixtures/windows/windows-10/systeminfo-hyperv.out @@ -0,0 +1,79 @@ + +Host Name: TESTLAPTOP +OS Name: Microsoft Windows 10 Enterprise +OS Version: 10.0.17134 N/A Build 17134 +OS Manufacturer: Microsoft Corporation +OS Configuration: Member Workstation +OS Build Type: Multiprocessor Free +Registered Owner: Test, Inc. +Registered Organization: Test, Inc. +Product ID: 11111-11111-11111-AA111 +Original Install Date: 3/26/2019, 3:51:30 PM +System Boot Time: 3/30/2021, 6:13:59 AM +System Manufacturer: Dell Inc. +System Model: Precision 5530 +System Type: x64-based PC +Processor(s): 1 Processor(s) Installed. + [01]: Intel64 Family 6 Model 158 Stepping 10 GenuineIntel ~2592 Mhz +BIOS Version: Dell Inc. 1.16.2, 4/21/2020 +Windows Directory: C:\WINDOWS +System Directory: C:\WINDOWS\system32 +Boot Device: \Device\HarddiskVolume2 +System Locale: en-us;English (United States) +Input Locale: en-us;English (United States) +Time Zone: (UTC-06:00) Central Time (US & Canada) +Total Physical Memory: 32,503 MB +Available Physical Memory: 19,743 MB +Virtual Memory: Max Size: 37,367 MB +Virtual Memory: Available: 22,266 MB +Virtual Memory: In Use: 15,101 MB +Page File Location(s): C:\pagefile.sys +Domain: test.com +Logon Server: \\TESTDC01 +Hotfix(s): 11 Hotfix(s) Installed. + [01]: KB2693643 + [02]: KB4601054 + [03]: KB4230204 + [04]: KB4346084 + [05]: KB4485449 + [06]: KB4486153 + [07]: KB4509094 + [08]: KB4535680 + [09]: KB4580325 + [10]: KB4580398 + [11]: KB4534293 +Network Card(s): 6 NIC(s) Installed. + [01]: Intel(R) Wireless-AC 9260 160MHz + Connection Name: Wi-Fi + DHCP Enabled: Yes + DHCP Server: 192.168.2.1 + IP address(es) + [01]: 192.168.2.219 + [02]: Bluetooth Device (Personal Area Network) + Connection Name: Bluetooth Network Connection + Status: Media disconnected + [03]: Microsoft KM-TEST Loopback Adapter + Connection Name: Npcap Loopback Adapter + DHCP Enabled: Yes + DHCP Server: 255.255.255.255 + IP address(es) + [01]: 169.254.161.245 + [04]: Cisco AnyConnect Secure Mobility Client Virtual Miniport Adapter for Windows x64 + Connection Name: Ethernet 5 + Status: Hardware not present + [05]: Hyper-V Virtual Ethernet Adapter + Connection Name: vEthernet (InternalVM) + DHCP Enabled: No + IP address(es) + [01]: 172.16.32.1 + [06]: Hyper-V Virtual Ethernet Adapter + Connection Name: vEthernet (Default Switch) 2 + DHCP Enabled: Yes + DHCP Server: 255.255.255.255 + IP address(es) + [01]: 172.26.251.65 +Hyper-V Requirements: VM Monitor Mode Extensions: Yes + Virtualization Enabled In Firmware: Yes + Second Level Address Translation: No + Data Execution Prevention Available: Yes + diff --git a/tests/fixtures/windows/windows-10/systeminfo.json b/tests/fixtures/windows/windows-10/systeminfo.json new file mode 100644 index 00000000..4abab0b2 --- /dev/null +++ b/tests/fixtures/windows/windows-10/systeminfo.json @@ -0,0 +1,56 @@ +{ + "host_name": "DESKTOP-WIN01", + "os_name": "Microsoft Windows 10 Enterprise", + "os_version": "10.0.19042 N/A Build 19042", + "os_manufacturer": "Microsoft Corporation", + "os_configuration": "Member Workstation", + "os_build_type": "Multiprocessor Free", + "registered_owner": "User", + "registered_organization": "", + "product_id": "00111-12345-00001-AA111", + "original_install_date": 1613503227, + "system_boot_time": 1616171103, + "system_manufacturer": "VMware, Inc.", + "system_model": "VMware7,1", + "system_type": "x64-based PC", + "processors": [ + "Intel64 Family 6 Model 158 Stepping 13 GenuineIntel ~2400 Mhz" + ], + "bios_version": "VMware, Inc. VMW71.00V.11111111.B64.2008100111, 8/10/2020", + "windows_directory": "C:\\Windows", + "system_directory": "C:\\Windows\\system32", + "boot_device": "\\Device\\HarddiskVolume1", + "system_locale": "en-us;English (United States)", + "input_locale": "en-us;English (United States)", + "time_zone": "(UTC-08:00) Pacific Time (US & Canada)", + "total_physical_memory_mb": 2047, + "available_physical_memory_mb": 1417, + "virtual_memory_max_size_mb": 2687, + "virtual_memory_available_mb": 1482, + "virtual_memory_in_use_mb": 1205, + "page_file_locations": "C:\\pagefile.sys", + "domain": "TEST.local", + "logon_server": "\\\\WIN-AA1A1A11AAA", + "hotfixs": [ + "KB4578968", + "KB4562830", + "KB4570334", + "KB4580325", + "KB4586864", + "KB4594440" + ], + "network_cards": [ + { + "name": "Intel(R) 82574L Gigabit Network Connection", + "connection_name": "Ethernet0", + "status": "", + "dhcp_enabled": true, + "dhcp_server": "192.168.133.250", + "ip_addresses": [ + "192.168.133.3", + "fe80::192:eb64:1fcf:86eb" + ] + } + ], + "hyperv_requirements": {} +} diff --git a/tests/fixtures/windows/windows-10/systeminfo.out b/tests/fixtures/windows/windows-10/systeminfo.out new file mode 100644 index 00000000..df4d05d9 --- /dev/null +++ b/tests/fixtures/windows/windows-10/systeminfo.out @@ -0,0 +1,47 @@ +Host Name: DESKTOP-WIN01 +OS Name: Microsoft Windows 10 Enterprise +OS Version: 10.0.19042 N/A Build 19042 +OS Manufacturer: Microsoft Corporation +OS Configuration: Member Workstation +OS Build Type: Multiprocessor Free +Registered Owner: User +Registered Organization: +Product ID: 00111-12345-00001-AA111 +Original Install Date: 2/16/2021, 11:20:27 AM +System Boot Time: 3/19/2021, 9:25:03 AM +System Manufacturer: VMware, Inc. +System Model: VMware7,1 +System Type: x64-based PC +Processor(s): 1 Processor(s) Installed. + [01]: Intel64 Family 6 Model 158 Stepping 13 GenuineIntel ~2400 Mhz +BIOS Version: VMware, Inc. VMW71.00V.11111111.B64.2008100111, 8/10/2020 +Windows Directory: C:\Windows +System Directory: C:\Windows\system32 +Boot Device: \Device\HarddiskVolume1 +System Locale: en-us;English (United States) +Input Locale: en-us;English (United States) +Time Zone: (UTC-08:00) Pacific Time (US & Canada) +Total Physical Memory: 2,047 MB +Available Physical Memory: 1,417 MB +Virtual Memory: Max Size: 2,687 MB +Virtual Memory: Available: 1,482 MB +Virtual Memory: In Use: 1,205 MB +Page File Location(s): C:\pagefile.sys +Domain: TEST.local +Logon Server: \\WIN-AA1A1A11AAA +Hotfix(s): 6 Hotfix(s) Installed. + [01]: KB4578968 + [02]: KB4562830 + [03]: KB4570334 + [04]: KB4580325 + [05]: KB4586864 + [06]: KB4594440 +Network Card(s): 1 NIC(s) Installed. + [01]: Intel(R) 82574L Gigabit Network Connection + Connection Name: Ethernet0 + DHCP Enabled: Yes + DHCP Server: 192.168.133.250 + IP address(es) + [01]: 192.168.133.3 + [02]: fe80::192:eb64:1fcf:86eb +Hyper-V Requirements: A hypervisor has been detected. Features required for Hyper-V will not be displayed. diff --git a/tests/fixtures/windows/windows-2012r2/systeminfo.json b/tests/fixtures/windows/windows-2012r2/systeminfo.json new file mode 100644 index 00000000..6977f53f --- /dev/null +++ b/tests/fixtures/windows/windows-2012r2/systeminfo.json @@ -0,0 +1,54 @@ +{ + "host_name": "WIN-1A1A1AA11AA", + "os_name": "Microsoft Windows Server 2012 R2 Standard", + "os_version": "6.3.9600 N/A Build 9600", + "os_manufacturer": "Microsoft Corporation", + "os_configuration": "Standalone Server", + "os_build_type": "Multiprocessor Free", + "registered_owner": "Windows User", + "registered_organization": "", + "product_id": "11111-11111-11111-AA111", + "original_install_date": 1544692548, + "system_boot_time": 1616967284, + "system_manufacturer": "Microsoft Corporation", + "system_model": "Virtual Machine", + "system_type": "x64-based PC", + "processors": [ + "Intel64 Family 6 Model 158 Stepping 10 GenuineIntel ~2592 Mhz" + ], + "bios_version": "Microsoft Corporation Hyper-V UEFI Release v3.0, 3/2/2018", + "windows_directory": "C:\\Windows", + "system_directory": "C:\\Windows\\system32", + "boot_device": "\\Device\\HarddiskVolume2", + "system_locale": "en-us;English (United States)", + "input_locale": "en-us;English (United States)", + "time_zone": "(UTC+03:00) Kuwait, Riyadh", + "total_physical_memory_mb": 3555, + "available_physical_memory_mb": 771, + "virtual_memory_max_size_mb": 5731, + "virtual_memory_available_mb": 2751, + "virtual_memory_in_use_mb": 2980, + "page_file_locations": "C:\\pagefile.sys", + "domain": "WORKGROUP", + "logon_server": "\\\\WIN-1A1A1AA11AA", + "hotfixs": [ + "KB2919355", + "KB2975061", + "KB2999226", + "KB3151864", + "KB4054566" + ], + "network_cards": [ + { + "name": "Microsoft Hyper-V Network Adapter", + "connection_name": "Ethernet 2", + "status": "", + "dhcp_enabled": false, + "dhcp_server": "", + "ip_addresses": [ + "172.16.32.10" + ] + } + ], + "hyperv_requirements": {} +} diff --git a/tests/fixtures/windows/windows-2012r2/systeminfo.out b/tests/fixtures/windows/windows-2012r2/systeminfo.out new file mode 100644 index 00000000..596738d1 --- /dev/null +++ b/tests/fixtures/windows/windows-2012r2/systeminfo.out @@ -0,0 +1,45 @@ + +Host Name: WIN-1A1A1AA11AA +OS Name: Microsoft Windows Server 2012 R2 Standard +OS Version: 6.3.9600 N/A Build 9600 +OS Manufacturer: Microsoft Corporation +OS Configuration: Standalone Server +OS Build Type: Multiprocessor Free +Registered Owner: Windows User +Registered Organization: +Product ID: 11111-11111-11111-AA111 +Original Install Date: 12/13/2018, 1:15:48 AM +System Boot Time: 3/28/2021, 2:34:44 PM +System Manufacturer: Microsoft Corporation +System Model: Virtual Machine +System Type: x64-based PC +Processor(s): 1 Processor(s) Installed. + [01]: Intel64 Family 6 Model 158 Stepping 10 GenuineIntel ~2592 Mhz +BIOS Version: Microsoft Corporation Hyper-V UEFI Release v3.0, 3/2/2018 +Windows Directory: C:\Windows +System Directory: C:\Windows\system32 +Boot Device: \Device\HarddiskVolume2 +System Locale: en-us;English (United States) +Input Locale: en-us;English (United States) +Time Zone: (UTC+03:00) Kuwait, Riyadh +Total Physical Memory: 3,555 MB +Available Physical Memory: 771 MB +Virtual Memory: Max Size: 5,731 MB +Virtual Memory: Available: 2,751 MB +Virtual Memory: In Use: 2,980 MB +Page File Location(s): C:\pagefile.sys +Domain: WORKGROUP +Logon Server: \\WIN-1A1A1AA11AA +Hotfix(s): 5 Hotfix(s) Installed. + [01]: KB2919355 + [02]: KB2975061 + [03]: KB2999226 + [04]: KB3151864 + [05]: KB4054566 +Network Card(s): 1 NIC(s) Installed. + [01]: Microsoft Hyper-V Network Adapter + Connection Name: Ethernet 2 + DHCP Enabled: No + IP address(es) + [01]: 172.16.32.10 +Hyper-V Requirements: A hypervisor has been detected. Features required for Hyper-V will not be displayed. diff --git a/tests/fixtures/windows/windows-7/systeminfo.json b/tests/fixtures/windows/windows-7/systeminfo.json new file mode 100644 index 00000000..8945f6fd --- /dev/null +++ b/tests/fixtures/windows/windows-7/systeminfo.json @@ -0,0 +1,325 @@ +{ + "host_name": "TEST", + "os_name": "Microsoft Windows 7 Professional", + "os_version": "6.1.7601 Service Pack 1 Build 7601", + "os_manufacturer": "Microsoft Corporation", + "os_configuration": "Standalone Workstation", + "os_build_type": "Multiprocessor Free", + "registered_owner": "jdoe", + "registered_organization": "", + "product_id": "00000-111-1111111-11111", + "original_install_date": 1420142400, + "system_boot_time": 1616444151, + "system_manufacturer": "LENOVO", + "system_model": "11111AA", + "system_type": "x64-based PC", + "processors": [ + "Intel64 Family 6 Model 42 Stepping 7 GenuineIntel ~2501 Mhz" + ], + "bios_version": "LENOVO 83ET67WW (1.37 ), 11/28/2011", + "windows_directory": "C:\\Windows", + "system_directory": "C:\\Windows\\system32", + "boot_device": "\\Device\\HarddiskVolume1", + "system_locale": "en-us;English (United States)", + "input_locale": "en-us;English (United States)", + "time_zone": "(UTC-06:00) Central Time (US & Canada)", + "total_physical_memory_mb": 8075, + "available_physical_memory_mb": 1620, + "virtual_memory_max_size_mb": 16149, + "virtual_memory_available_mb": 6468, + "virtual_memory_in_use_mb": 9681, + "page_file_locations": "C:\\pagefile.sys", + "domain": "WORKGROUP", + "logon_server": "\\\\TEST", + "hotfixs": [ + "KB2849697", + "KB2849696", + "KB2841134", + "KB2670838", + "KB2830477", + "KB2592687", + "KB971033", + "KB2479943", + "KB2491683", + "KB2506014", + "KB2506212", + "KB2506928", + "KB2509553", + "KB2511455", + "KB2515325", + "KB2532531", + "KB2533552", + "KB2533623", + "KB2534366", + "KB2536275", + "KB2536276", + "KB2544893", + "KB2545698", + "KB2547666", + "KB2552343", + "KB2560656", + "KB2562937", + "KB2563227", + "KB2564958", + "KB2570947", + "KB2574819", + "KB2579686", + "KB2585542", + "KB2603229", + "KB2604115", + "KB2619339", + "KB2620704", + "KB2621440", + "KB2631813", + "KB2639308", + "KB2640148", + "KB2647753", + "KB2653956", + "KB2654428", + "KB2656356", + "KB2660075", + "KB2667402", + "KB2676562", + "KB2685811", + "KB2685813", + "KB2685939", + "KB2690533", + "KB2698365", + "KB2705219", + "KB2706045", + "KB2709630", + "KB2712808", + "KB2718704", + "KB2719857", + "KB2726535", + "KB2727528", + "KB2729094", + "KB2729452", + "KB2731771", + "KB2732059", + "KB2732487", + "KB2732500", + "KB2736422", + "KB2742599", + "KB2750841", + "KB2758857", + "KB2761217", + "KB2763523", + "KB2770660", + "KB2773072", + "KB2786081", + "KB2789645", + "KB2791765", + "KB2798162", + "KB2799926", + "KB2800095", + "KB2803821", + "KB2807986", + "KB2808679", + "KB2813347", + "KB2813430", + "KB2820331", + "KB2832414", + "KB2834140", + "KB2836942", + "KB2836943", + "KB2839894", + "KB2840149", + "KB2840631", + "KB2843630", + "KB2846960", + "KB2847077", + "KB2847311", + "KB2847927", + "KB2852386", + "KB2853952", + "KB2855844", + "KB2857650", + "KB2861191", + "KB2861698", + "KB2862152", + "KB2862330", + "KB2862335", + "KB2862966", + "KB2862973", + "KB2864058", + "KB2864202", + "KB2868038", + "KB2868116", + "KB2868626", + "KB2871997", + "KB2872339", + "KB2882822", + "KB2884256", + "KB2887069", + "KB2888049", + "KB2891804", + "KB2892074", + "KB2893294", + "KB2893519", + "KB2894844", + "KB2900986", + "KB2908783", + "KB2911501", + "KB2912390", + "KB2913152", + "KB2918077", + "KB2918614", + "KB2919469", + "KB2922229", + "KB2923545", + "KB2926765", + "KB2928562", + "KB2929733", + "KB2931356", + "KB2937610", + "KB2939576", + "KB2943357", + "KB2952664", + "KB2957189", + "KB2957503", + "KB2957509", + "KB2961072", + "KB2965788", + "KB2966583", + "KB2968294", + "KB2970228", + "KB2971850", + "KB2972100", + "KB2972211", + "KB2972280", + "KB2973112", + "KB2973201", + "KB2973351", + "KB2976627", + "KB2976897", + "KB2977292", + "KB2977728", + "KB2978092", + "KB2978120", + "KB2978668", + "KB2978742", + "KB2979570", + "KB2980245", + "KB2984972", + "KB2984976", + "KB2984981", + "KB2985461", + "KB2991963", + "KB2992611", + "KB2993651", + "KB2993958", + "KB2994023", + "KB2999226", + "KB3001554", + "KB3002885", + "KB3003057", + "KB3003743", + "KB3004361", + "KB3004375", + "KB3005607", + "KB3006121", + "KB3006226", + "KB3006625", + "KB3008627", + "KB3008923", + "KB3009736", + "KB3010788", + "KB3011780", + "KB3012176", + "KB3013126", + "KB3013410", + "KB3014406", + "KB3019215", + "KB3020369", + "KB3020388", + "KB3021674", + "KB3022777", + "KB3023215", + "KB3025390", + "KB3030377", + "KB3031432", + "KB3032655", + "KB3033889", + "KB3033890", + "KB3033929", + "KB3035126", + "KB3035132", + "KB3037574", + "KB3042058", + "KB3042553", + "KB3045685", + "KB3046017", + "KB3046269", + "KB3055642", + "KB3059317", + "KB3060716", + "KB3061518", + "KB3067903", + "KB3069114", + "KB3069392", + "KB3069762", + "KB3071756", + "KB3072305", + "KB3072630", + "KB3072633", + "KB3074543", + "KB3075226", + "KB3076895", + "KB3076949", + "KB3077715", + "KB3078601", + "KB3080446", + "KB3081320", + "KB3083710", + "KB3084135", + "KB3086255", + "KB3087039", + "KB3087918", + "KB3088195" + ], + "network_cards": [ + { + "name": "Bluetooth Device (Personal Area Network)", + "connection_name": "Bluetooth Network Connection", + "status": "Media disconnected", + "dhcp_enabled": false, + "dhcp_server": "", + "ip_addresses": [] + }, + { + "name": "Intel(R) 82579LM Gigabit Network Connection", + "connection_name": "Local Area Connection", + "status": "Media disconnected", + "dhcp_enabled": false, + "dhcp_server": "", + "ip_addresses": [] + }, + { + "name": "Intel(R) Centrino(R) Advanced-N 6205", + "connection_name": "Wireless Network Connection", + "status": "", + "dhcp_enabled": true, + "dhcp_server": "192.168.2.1", + "ip_addresses": [ + "192.168.2.2" + ] + }, + { + "name": "Microsoft Virtual WiFi Miniport Adapter", + "connection_name": "Wireless Network Connection 2", + "status": "Hardware not present", + "dhcp_enabled": false, + "dhcp_server": "", + "ip_addresses": [] + }, + { + "name": "Microsoft Virtual WiFi Miniport Adapter", + "connection_name": "Wireless Network Connection 3", + "status": "Hardware not present", + "dhcp_enabled": false, + "dhcp_server": "", + "ip_addresses": [] + } + ] +} diff --git a/tests/fixtures/windows/windows-7/systeminfo.out b/tests/fixtures/windows/windows-7/systeminfo.out new file mode 100644 index 00000000..95bc2bdc --- /dev/null +++ b/tests/fixtures/windows/windows-7/systeminfo.out @@ -0,0 +1,298 @@ + +Host Name: TEST +OS Name: Microsoft Windows 7 Professional +OS Version: 6.1.7601 Service Pack 1 Build 7601 +OS Manufacturer: Microsoft Corporation +OS Configuration: Standalone Workstation +OS Build Type: Multiprocessor Free +Registered Owner: jdoe +Registered Organization: +Product ID: 00000-111-1111111-11111 +Original Install Date: 01/01/2015, 12:00:00 PM +System Boot Time: 3/22/2021, 1:15:51 PM +System Manufacturer: LENOVO +System Model: 11111AA +System Type: x64-based PC +Processor(s): 1 Processor(s) Installed. + [01]: Intel64 Family 6 Model 42 Stepping 7 GenuineIntel ~2501 Mhz +BIOS Version: LENOVO 83ET67WW (1.37 ), 11/28/2011 +Windows Directory: C:\Windows +System Directory: C:\Windows\system32 +Boot Device: \Device\HarddiskVolume1 +System Locale: en-us;English (United States) +Input Locale: en-us;English (United States) +Time Zone: (UTC-06:00) Central Time (US & Canada) +Total Physical Memory: 8,075 MB +Available Physical Memory: 1,620 MB +Virtual Memory: Max Size: 16,149 MB +Virtual Memory: Available: 6,468 MB +Virtual Memory: In Use: 9,681 MB +Page File Location(s): C:\pagefile.sys +Domain: WORKGROUP +Logon Server: \\TEST +Hotfix(s): 302 Hotfix(s) Installed. + [01]: KB2849697 + [02]: KB2849696 + [03]: KB2841134 + [04]: KB2670838 + [05]: KB2830477 + [06]: KB2592687 + [07]: KB971033 + [08]: KB2479943 + [09]: KB2491683 + [10]: KB2506014 + [11]: KB2506212 + [12]: KB2506928 + [13]: KB2509553 + [14]: KB2511455 + [15]: KB2515325 + [16]: KB2532531 + [17]: KB2533552 + [18]: KB2533623 + [19]: KB2534366 + [20]: KB2536275 + [21]: KB2536276 + [22]: KB2544893 + [23]: KB2545698 + [24]: KB2547666 + [25]: KB2552343 + [26]: KB2560656 + [27]: KB2562937 + [28]: KB2563227 + [29]: KB2564958 + [30]: KB2570947 + [31]: KB2574819 + [32]: KB2579686 + [33]: KB2585542 + [34]: KB2603229 + [35]: KB2604115 + [36]: KB2619339 + [37]: KB2620704 + [38]: KB2621440 + [39]: KB2631813 + [40]: KB2639308 + [41]: KB2640148 + [42]: KB2647753 + [43]: KB2653956 + [44]: KB2654428 + [45]: KB2656356 + [46]: KB2660075 + [47]: KB2667402 + [48]: KB2676562 + [49]: KB2685811 + [50]: KB2685813 + [51]: KB2685939 + [52]: KB2690533 + [53]: KB2698365 + [54]: KB2705219 + [55]: KB2706045 + [56]: KB2709630 + [57]: KB2712808 + [58]: KB2718704 + [59]: KB2719857 + [60]: KB2726535 + [61]: KB2727528 + [62]: KB2729094 + [63]: KB2729452 + [64]: KB2731771 + [65]: KB2732059 + [66]: KB2732487 + [67]: KB2732500 + [68]: KB2736422 + [69]: KB2742599 + [70]: KB2750841 + [71]: KB2758857 + [72]: KB2761217 + [73]: KB2763523 + [74]: KB2770660 + [75]: KB2773072 + [76]: KB2786081 + [77]: KB2789645 + [78]: KB2791765 + [79]: KB2798162 + [80]: KB2799926 + [81]: KB2800095 + [82]: KB2803821 + [83]: KB2807986 + [84]: KB2808679 + [85]: KB2813347 + [86]: KB2813430 + [87]: KB2820331 + [88]: KB2832414 + [89]: KB2834140 + [90]: KB2836942 + [91]: KB2836943 + [92]: KB2839894 + [93]: KB2840149 + [94]: KB2840631 + [95]: KB2843630 + [96]: KB2846960 + [97]: KB2847077 + [98]: KB2847311 + [99]: KB2847927 + [100]: KB2852386 + [101]: KB2853952 + [102]: KB2855844 + [103]: KB2857650 + [104]: KB2861191 + [105]: KB2861698 + [106]: KB2862152 + [107]: KB2862330 + [108]: KB2862335 + [109]: KB2862966 + [110]: KB2862973 + [111]: KB2864058 + [112]: KB2864202 + [113]: KB2868038 + [114]: KB2868116 + [115]: KB2868626 + [116]: KB2871997 + [117]: KB2872339 + [118]: KB2882822 + [119]: KB2884256 + [120]: KB2887069 + [121]: KB2888049 + [122]: KB2891804 + [123]: KB2892074 + [124]: KB2893294 + [125]: KB2893519 + [126]: KB2894844 + [127]: KB2900986 + [128]: KB2908783 + [129]: KB2911501 + [130]: KB2912390 + [131]: KB2913152 + [132]: KB2918077 + [133]: KB2918614 + [134]: KB2919469 + [135]: KB2922229 + [136]: KB2923545 + [137]: KB2926765 + [138]: KB2928562 + [139]: KB2929733 + [140]: KB2931356 + [141]: KB2937610 + [142]: KB2939576 + [143]: KB2943357 + [144]: KB2952664 + [145]: KB2957189 + [146]: KB2957503 + [147]: KB2957509 + [148]: KB2961072 + [149]: KB2965788 + [150]: KB2966583 + [151]: KB2968294 + [152]: KB2970228 + [153]: KB2971850 + [154]: KB2972100 + [155]: KB2972211 + [156]: KB2972280 + [157]: KB2973112 + [158]: KB2973201 + [159]: KB2973351 + [160]: KB2976627 + [161]: KB2976897 + [162]: KB2977292 + [163]: KB2977728 + [164]: KB2978092 + [165]: KB2978120 + [166]: KB2978668 + [167]: KB2978742 + [168]: KB2979570 + [169]: KB2980245 + [170]: KB2984972 + [171]: KB2984976 + [172]: KB2984981 + [173]: KB2985461 + [174]: KB2991963 + [175]: KB2992611 + [176]: KB2993651 + [177]: KB2993958 + [178]: KB2994023 + [179]: KB2999226 + [180]: KB3001554 + [181]: KB3002885 + [182]: KB3003057 + [183]: KB3003743 + [184]: KB3004361 + [185]: KB3004375 + [186]: KB3005607 + [187]: KB3006121 + [188]: KB3006226 + [189]: KB3006625 + [190]: KB3008627 + [191]: KB3008923 + [192]: KB3009736 + [193]: KB3010788 + [194]: KB3011780 + [195]: KB3012176 + [196]: KB3013126 + [197]: KB3013410 + [198]: KB3014406 + [199]: KB3019215 + [200]: KB3020369 + [201]: KB3020388 + [202]: KB3021674 + [203]: KB3022777 + [204]: KB3023215 + [205]: KB3025390 + [206]: KB3030377 + [207]: KB3031432 + [208]: KB3032655 + [209]: KB3033889 + [210]: KB3033890 + [211]: KB3033929 + [212]: KB3035126 + [213]: KB3035132 + [214]: KB3037574 + [215]: KB3042058 + [216]: KB3042553 + [217]: KB3045685 + [218]: KB3046017 + [219]: KB3046269 + [220]: KB3055642 + [221]: KB3059317 + [222]: KB3060716 + [223]: KB3061518 + [224]: KB3067903 + [225]: KB3069114 + [226]: KB3069392 + [227]: KB3069762 + [228]: KB3071756 + [229]: KB3072305 + [230]: KB3072630 + [231]: KB3072633 + [232]: KB3074543 + [233]: KB3075226 + [234]: KB3076895 + [235]: KB3076949 + [236]: KB3077715 + [237]: KB3078601 + [238]: KB3080446 + [239]: KB3081320 + [240]: KB3083710 + [241]: KB3084135 + [242]: KB3086255 + [243]: KB3087039 + [244]: KB3087918 + [245]: KB3088195 + [246] +Network Card(s): 5 NIC(s) Installed. + [01]: Bluetooth Device (Personal Area Network) + Connection Name: Bluetooth Network Connection + Status: Media disconnected + [02]: Intel(R) 82579LM Gigabit Network Connection + Connection Name: Local Area Connection + Status: Media disconnected + [03]: Intel(R) Centrino(R) Advanced-N 6205 + Connection Name: Wireless Network Connection + DHCP Enabled: Yes + DHCP Server: 192.168.2.1 + IP address(es) + [01]: 192.168.2.2 + [04]: Microsoft Virtual WiFi Miniport Adapter + Connection Name: Wireless Network Connection 2 + Status: Hardware not present + [05]: Microsoft Virtual WiFi Miniport Adapter + Connection Name: Wireless Network Connection 3 + Status: Hardware not present diff --git a/tests/test_systeminfo.py b/tests/test_systeminfo.py new file mode 100644 index 00000000..e790e506 --- /dev/null +++ b/tests/test_systeminfo.py @@ -0,0 +1,46 @@ +import json +import os +import unittest +import jc.parsers.systeminfo + +THIS_DIR = os.path.dirname(os.path.abspath(__file__)) + + +class MyTests(unittest.TestCase): + test_files = [ + "tests/fixtures/windows/windows-7/systeminfo", + "tests/fixtures/windows/windows-10/systeminfo", + "tests/fixtures/windows/windows-10/systeminfo-hyperv", + "tests/fixtures/windows/windows-2012r2/systeminfo", + ] + + def setUp(self): + for tf in MyTests.test_files: + in_file = os.path.join(THIS_DIR, os.pardir, f"{tf}.out") + out_file = os.path.join(THIS_DIR, os.pardir, f"{tf}.json") + + with open(in_file, "r", encoding="utf-8") as f: + setattr(self, self.varName(tf), f.read()) + with open(out_file, "r", encoding="utf-8") as f: + setattr(self, self.varName(tf) + "_json", json.loads(f.read())) + + def varName(self, path): + return ( + path.replace("tests/fixtures/windows", "") + .replace("-", "_") + .replace("/", "_") + ) + + def test_windows_systeminfo(self): + """ + Test a sample Windows "systeminfo" command output + """ + for tf in MyTests.test_files: + in_var = getattr(self, self.varName(tf)) + out_var = getattr(self, self.varName(tf) + "_json") + + self.assertEqual(jc.parsers.systeminfo.parse(in_var, quiet=True), out_var) + + +if __name__ == "__main__": + unittest.main()