From ef50d48181dda9eb3a2b8df2caf0c3ad843f751b Mon Sep 17 00:00:00 2001 From: Leidong Wang Date: Fri, 29 Nov 2024 11:36:29 +0800 Subject: [PATCH] Replace WMIC with powershell cmd From Win11-24H2, WMIC is an optional feature for Windows, And it will be fully removed in the future.So replace the related cmd Signed-off-by: Leidong Wang --- virttest/utils_disk.py | 2 +- virttest/utils_misc.py | 11 ++++++----- virttest/utils_net.py | 23 ++++++++++++----------- virttest/utils_netperf.py | 2 +- virttest/utils_test/__init__.py | 5 ++--- virttest/utils_test/qemu/__init__.py | 2 +- 6 files changed, 23 insertions(+), 22 deletions(-) diff --git a/virttest/utils_disk.py b/virttest/utils_disk.py index 57d54992c4..ea3350b1e1 100644 --- a/virttest/utils_disk.py +++ b/virttest/utils_disk.py @@ -835,7 +835,7 @@ def get_disk_size_windows(session, did): e.g. 0, 1 :return: disk size. """ - cmd = "wmic diskdrive get size, index" + cmd = 'powershell -command "Get-CimInstance Win32_DiskDrive | Select-Object Size, Index"' return int(re.findall(r"%s\s+(\d+)" % did, session.cmd_output(cmd))[0]) diff --git a/virttest/utils_misc.py b/virttest/utils_misc.py index 6f08dcbb45..8fa85fbe0f 100644 --- a/virttest/utils_misc.py +++ b/virttest/utils_misc.py @@ -2351,8 +2351,7 @@ def get_free_disk(session, mount): :return string: freespace M-bytes """ if re.match(r"[a-zA-Z]:", mount): - cmd = "wmic logicaldisk where \"DeviceID='%s'\" " % mount - cmd += "get FreeSpace" + cmd = ('powershell -command "Get-CimInstance Win32_LogicalDisk | Where-Object {$_.DeviceID -eq \'%s\'} | Select-Object FreeSpace"') % mount output = session.cmd_output(cmd) free = "%sK" % re.findall(r"\d+", output)[0] else: @@ -2375,7 +2374,8 @@ def get_free_mem(session, os_type): if os_type != "windows": free = "%s kB" % get_mem_info(session, "MemFree") else: - output = session.cmd_output("wmic OS get FreePhysicalMemory") + output = session.cmd_output('powershell -command "Get-CimInstance Win32_OperatingSystem | ' + 'Select-Object FreePhysicalMemory"') free = "%sK" % re.findall("\d+", output)[0] free = float(normalize_data_size(free, order_magnitude="M")) return int(free) @@ -2475,11 +2475,12 @@ def get_win_disk_vol(session, condition="VolumeName='WIN_UTILS'"): Getting logicaldisk drive letter in windows guest. :param session: session Object. - :param condition: supported condition via cmd "wmic logicaldisk list". + :param condition: supported condition via powershell cmd "Get-CimInstance Win32_LogicalDisk". :return: volume ID. """ - cmd = "wmic logicaldisk where (%s) get DeviceID" % condition + c_name, c_value = condition.split('=') + cmd = ('powershell -command "Get-CimInstance -ClassName Win32_LogicalDisk | Where-Object {$_.%s -eq %s} | Select-Object DeviceID"') % (c_name, c_value) output = session.cmd(cmd, timeout=120) device = re.search(r"(\w):", output, re.M) if not device: diff --git a/virttest/utils_net.py b/virttest/utils_net.py index 91715e1c88..8d0cc1af4f 100644 --- a/virttest/utils_net.py +++ b/virttest/utils_net.py @@ -1654,10 +1654,10 @@ def set_guest_ip_addr(session, mac, ip_addr, netmask="255.255.255.0", os_type="l session.cmd(cmd, timeout=360) elif os_type == "windows": info_cmd = "ipconfig /all" - cmd = ( - "wmic nicconfig where MACAddress='%s' call " - "enablestatic '%s','%s'" % (mac, ip_addr, netmask) - ) + get_nic_cmd = 'powershell -command "Get-CimInstance Win32_NetworkAdapterConfiguration -Filter \'MACAddress=\'%s\'\'' % mac + nic = session.cmd_output(get_nic_cmd, timeout=120) + cmd = 'powershell -command "Invoke-CimMethod -InputObject \'%s\' -MethodName EnableStatic -Arguments @{IPAddress = \'%s\'; SubnetMask = \'%s\'}"' % ( + nic, ip_addr, netmask) session.cmd(cmd, timeout=360) else: info_cmd = "" @@ -3788,7 +3788,7 @@ def str2ipaddr(str_ip): return None maps = {} - cmd = "wmic nicconfig where IPEnabled=True get ipaddress, macaddress" + cmd = ('powershell -command "Get-CimInstance Win32_NetworkAdapterConfiguration -Filter \'IPEnabled=True\' | Select-Object IPAddress, MACAddress"') out = session.cmd_output(cmd) regex = r".*\w{2}[:-]\w{2}[:-]\w{2}[:-]\w{2}[:-]\w{2}[:-]\w{2}\s*" lines = [l.strip() for l in out.splitlines() if l.strip()] @@ -3944,16 +3944,17 @@ def get_windows_nic_attribute( session, key, value, target, timeout=240, global_switch="nic" ): """ - Get the windows nic attribute using wmic. All the support key you can - using wmic to have a check. + Get the windows nic attribute using powershell. All the support key you can + using powershell to have a check. :param session: session to the virtual machine - :param key: the key supported by wmic + :param key: the key supported by Get-CimInstance :param value: the value of the key :param target: which nic attribute you want to get. """ - cmd = 'wmic %s where %s="%s" get %s' % (global_switch, key, value, target) + cmd = ('powershell -command "Get-CimInstance "Win32_%s" -Filter "%s=%s" | Select-Object -Property %s"' + % (global_switch, key, value, target)) status, out = session.cmd_status_output(cmd, timeout=timeout) if status != 0: err_msg = "Execute guest shell command('%s') " "failed with error: '%s'" % ( @@ -3993,7 +3994,7 @@ def restart_windows_guest_network(session, connection_id, timeout=240, mode="net :param session: session to virtual machine :param connection_id: windows nic connectionid,it means connection name, - you Can get connection id string via wmic + you Can get connection id string via wmic or powershell """ if mode == "netsh": disable_windows_guest_network(session, connection_id, timeout=timeout) @@ -4011,7 +4012,7 @@ def restart_windows_guest_network_by_key( using devcon mode must download devcon.exe and put it under c:\ :param session: session to virtual machine - :param key: the key supported by wmic nic + :param key: the key supported by Get-CimInstance nic :param value: the value of the key :param timeout: timeout :param mode: command mode netsh or devcon diff --git a/virttest/utils_netperf.py b/virttest/utils_netperf.py index 364e297be9..bf5ac88b7e 100644 --- a/virttest/utils_netperf.py +++ b/virttest/utils_netperf.py @@ -290,7 +290,7 @@ def __init__( def is_target_running(self, target): list_cmd = "ps -C %s" % target if self.client == "nc": - list_cmd = "wmic process where name='%s' list" % target + list_cmd = 'powershell -command "Get-CimInstance Win32_Process -Filter "Name=%s" | Format-List *"' % target try: output = self.session.cmd_output_safe(list_cmd, timeout=120) check_reg = re.compile(r"%s" % target, re.I | re.M) diff --git a/virttest/utils_test/__init__.py b/virttest/utils_test/__init__.py index d687fccbaf..90bbf9c094 100755 --- a/virttest/utils_test/__init__.py +++ b/virttest/utils_test/__init__.py @@ -300,10 +300,9 @@ def start_windows_service(session, service, timeout=120): def get_windows_file_abs_path(session, filename, extension="exe", tmout=240): """ - return file abs path "drive+path" by "wmic datafile" + return file abs path "drive+path" by Get-CimInstance """ - cmd_tmp = "wmic datafile where \"Filename='%s' and " - cmd_tmp += "extension='%s'\" get drive^,path" + cmd_tmp = ('powershell -command "Get-CimInstance -Query "SELECT Drive, Path FROM CIM_DataFile WHERE Filename="%s" AND Extension="%s"" | Select-Object Name"') cmd = cmd_tmp % (filename, extension) info = session.cmd_output(cmd, timeout=tmout).strip() drive_path = re.search(r"(\w):\s+(\S+)", info, re.M) diff --git a/virttest/utils_test/qemu/__init__.py b/virttest/utils_test/qemu/__init__.py index 5f24a0c6ae..67aecf0803 100644 --- a/virttest/utils_test/qemu/__init__.py +++ b/virttest/utils_test/qemu/__init__.py @@ -488,7 +488,7 @@ def get_guest_total_mem(cls, vm): :return: physical memory report by guest OS in MB """ if vm.params.get("os_type") == "windows": - cmd = "wmic ComputerSystem get TotalPhysicalMemory" + cmd = 'powershell -command "(Get-CimInstance -ClassName Win32_ComputerSystem).TotalPhysicalMemory"' else: cmd = "grep 'MemTotal:' /proc/meminfo" return vm.get_memory_size(cmd)