我正在使用以下命令在Windows端点上执行WMI查询,该查询返回列表中的结果。我想现在将该列表转换为字典键:值,以便我可以搜索所有键,其中“Name”作为将返回的名称:“ASPNET”“Guest”“Admin”。
import wmi_client_wrapper as wmi
wmic = wmi.WmiClientWrapper(
username="corp.testdomain.com/Administrator",
password="fakepassword",
host="192.168.1.100",
)
output = wmic.query("Select * from Win32_UserAccount Where LocalAccount = True")
{'Status': 'OK', 'Domain': 'localhost', 'Description': 'Account used for running the ASP.NET worker process (aspnet_wp.exe )', 'InstallDate': None, 'Caption': 'localhost\\ASPNET', 'Disabled': False, 'PasswordChangeable': False, 'Lockout': False, 'AccountType': '512', 'SID': '45474748484848-1002', 'LocalAccount': True, 'FullName': 'ASP.NET Ma chine Account', 'SIDType': '1', 'PasswordRequired': False, 'PasswordExpires': False, 'Name': 'ASPNET'}
{'Status': 'Degraded', 'Domain': 'localhost', 'Description': 'Built-in account for guest access to the computer/domain', ' InstallDate': None, 'Caption': 'localhost\\Guest', 'Disabled': True, 'PasswordChangeable': False, 'Lockout': False, 'Accou ntType': '512', 'SID': '3645747474747858-501', 'LocalAccount': True, 'FullName': '', 'SIDType': '1', 'PasswordRequired': False, 'PasswordExpires': False, 'Name': 'Guest'}
{'Status': 'OK', 'Domain': 'localhost', 'Description': 'Built-in account for administering the computer/domain', 'InstallD ate': None, 'Caption': 'localhost\\sol2112', 'Disabled': False, 'PasswordChangeable': True, 'Lockout': False, 'AccountType ': '512', 'SID': '834668384636846843-500, 'LocalAccount': True, 'FullName': '', 'SIDType': '1', 'Pass wordRequired': True, 'PasswordExpires': False, 'Name': 'Admin'}
答案 0 :(得分:0)
你可以做到
>>> dict1 = {'Status': 'OK', 'Domain': 'localhost', 'Description': 'Account used for running the ASP.NET worker process (aspnet_wp.exe )', 'InstallDate': None, 'Caption': 'localhost\\ASPNET', 'Disabled': False, 'PasswordChangeable': False, 'Lockout': False, 'AccountType': '512', 'SID': '45474748484848-1002', 'LocalAccount': True, 'FullName': 'ASP.NET Ma chine Account', 'SIDType': '1', 'PasswordRequired': False, 'PasswordExpires': False, 'Name': 'ASPNET'}
>>> print dict1['Name']
ASPNET
答案 1 :(得分:0)
如果output
的结构是:
[{'Status': 'OK', 'Domain': 'localhost', 'Description': 'Account used for running the ASP.NET worker process (aspnet_wp.exe )', ..., 'Name': 'ASPNET'},
{'Status': 'Degraded', 'Domain': 'localhost', 'Description': 'Built-in account for guest access to the computer/domain', ..., 'Name': 'Guest'},
{'Status': 'OK', 'Domain': 'localhost', 'Description': 'Built-in account for administering the computer/domain', ..., 'Name': 'Admin'}]
我会把它迭代成一个列表字典,用字典中的键来键入:
output = wmic.query("Select * from Win32_UserAccount Where LocalAccount = True")
new_dict = {}
for key in output[0]:
new_dict[key] = [old_dict[key] for old_dict in output]
这也可以在一行中完成,其中包含两个列表推导和dict
内置:
new_dict = dict([(key, [old_dict[key] for old_dict in output])
for key in output[0]])
如果你有词典理解,你可以使用其中一个:
new_dict = {key: [old_dict[key] for old_dict in output]
for key in output[0]}
这些中的每一个都会为output
中的每个结果词典提供一个与其相似的词典。 output
中字典中的所有值都存在于其原始字典中找到它们的键的列表中。它们按照output
中出现的顺序排列。
{'Status': ['OK', 'Degraded', 'OK'],
'Domain': ['localhost', 'localhost', 'localhost'],
'Description': ['Account used for running the ASP.NET worker process (aspnet_wp.exe)',
'Built-in account for guest access to the computer/domain',
'Built-in account for administering the computer/domain'],
'InstallDate': [None, None, None],
'Caption': ['localhost\\ASPNET', 'localhost\\Guest', 'localhost\\sol2112'],
'Disabled': [False, True, False],
'PasswordChangeable': [False, False, True],
'Lockout': [False, False, False],
'AccountType': ['512', '512', '512'],
'SID': ['45474748484848-1002',
'3645747474747858-501',
'834668384636846843-500'],
'LocalAccount': [True, True, True],
'FullName': ['ASP.NET Machine Account', '', ''],
'SIDType': ['1', '1', '1'],
'PasswordRequired': [False, False, True],
'PasswordExpires': [False, False, False],
'Name': ['ASPNET', 'Guest', 'Admin']}