Skip to content

Commit

Permalink
Replace WMIC with powershell cmd
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
leidwang committed Nov 29, 2024
1 parent 1760004 commit 97073f0
Show file tree
Hide file tree
Showing 6 changed files with 48 additions and 27 deletions.
2 changes: 1 addition & 1 deletion virttest/utils_disk.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 Index, Size"'
return int(re.findall(r"%s\s+(\d+)" % did, session.cmd_output(cmd))[0])


Expand Down
11 changes: 6 additions & 5 deletions virttest/utils_misc.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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)
Expand Down Expand Up @@ -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:
Expand Down
45 changes: 33 additions & 12 deletions virttest/utils_net.py
Original file line number Diff line number Diff line change
Expand Up @@ -1654,10 +1654,12 @@ 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 "$Adapter=Get-CimInstance Win32_NetworkAdapterConfiguration | '
'Where-Object {$_.MACAddress -eq \'%s\'}; $Adapter.InterfaceIndex') % mac
nic_index = session.cmd_output(get_nic_cmd, timeout=120)
prefix_length = subnet_mask_to_prefix_length(netmask)
cmd = ("New-NetIPAddress -InterfaceIndex %s -IPAddress %s -PrefixLength %s" %
(nic_index, ip_addr, prefix_length))
session.cmd(cmd, timeout=360)
else:
info_cmd = ""
Expand All @@ -1666,6 +1668,23 @@ def set_guest_ip_addr(session, mac, ip_addr, netmask="255.255.255.0", os_type="l
LOG.debug(session.cmd_output(info_cmd))
raise IPAddrSetError(mac, ip_addr, err)

def subnet_mask_to_prefix_length(subnet_mask):
"""
Convert subnet_mask from 255.*** to prefix length
:param subnet_mask: nic subnet_mask
:return: prefix length
"""

octets = subnet_mask.split('.')

prefix_length = 0
for octet in octets:
prefix_length += bin(int(octet)).count('1')

return prefix_length


def get_guest_nameserver(session):
"""
Expand Down Expand Up @@ -3788,7 +3807,8 @@ def str2ipaddr(str_ip):
return None

maps = {}
cmd = "wmic nicconfig where IPEnabled=True get ipaddress, macaddress"
cmd = ('powershell -command "Get-CimInstance Win32_NetworkAdapterConfiguration | '
'Where-Object {$_.IPEnabled -eq \'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()]
Expand Down Expand Up @@ -3941,19 +3961,20 @@ def update_mac_ip_address(vm, timeout=240):


def get_windows_nic_attribute(
session, key, value, target, timeout=240, global_switch="nic"
session, key, value, target, timeout=240, global_switch="NetworkAdapter"
):
"""
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 | Where-Object {$_.%s -eq \'%s\'} | Select-Object %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'" % (
Expand Down Expand Up @@ -3993,7 +4014,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)
Expand All @@ -4011,7 +4032,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
Expand Down
2 changes: 1 addition & 1 deletion virttest/utils_netperf.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 | Where-Object {$_.Name -eq \'%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)
Expand Down
13 changes: 6 additions & 7 deletions virttest/utils_test/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -300,18 +300,17 @@ 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 = cmd_tmp % (filename, extension)
full_name = filename + '.' + extension
cmd = ('powershell -command "Get-PSDrive -PSProvider FileSystem | ForEach-Object {Get-ChildItem -Path $_.Root -Filter \"%s\" -Recurse -ErrorAction SilentlyContinue} | Select-Object Fullname"') % full_name
info = session.cmd_output(cmd, timeout=tmout).strip()
drive_path = re.search(r"(\w):\s+(\S+)", info, re.M)
if not drive_path:
file_abs_path = re.seearch(r"^[A-Z]:\\.*\.*$", info, re.M)
if not file_abs_path:
raise exceptions.TestError(
"Not found file %s.%s in your guest" % (filename, extension)
)
return ":".join(drive_path.groups())
return file_abs_path.string


def get_windows_disk_drive(session, filename, extension="exe", tmout=240):
Expand Down
2 changes: 1 addition & 1 deletion virttest/utils_test/qemu/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit 97073f0

Please sign in to comment.