Ich habe in letzter Zeit ziemlich viel mit Ansible gespielt und leider ist es nur unter Linux verfügbar. Als großer Windows-Typ musste ich eine Menge darüber lernen, wie Linux und Python mit Windows interagieren. Mein Ziel war es, meine Ubuntu-Linux-Box mit Python dazu zu bringen, WMI abzufragen. Lass es uns aufschlüsseln!
WMIC unter Linux herunterladen
Die erste Aufgabe bestand darin, eine allgemeine WMI-Klasse auf einer Windows-Box abzufragen. Um dies unter Linux zu tun, müssen wir das WMIC-Paket herunterladen und kompilieren. Schauen Sie sich dazu diesen GitHub Gist an. Für alle, die zu faul sind, auf den Link zu klicken, hier ist, was ausgeführt werden muss, um dies zu erreichen.
dpkg -i libwmiclient1_1.3.14-3_amd64.deb
dpkg -i wmi-client_1.3.14-3_amd64.deb
## Test a query to a remote computer
wmic -Utestuser%tstpass //<remote IP> "SELECT * FROM Win32_OperatingSystem"
Wenn Sie die Eigenschaften und Werte von Win32_OperatingSystem sehen, sind Sie gut!
WMI in Python
Der nächste Schritt besteht darin, ein WMI-Modul für Python zu erhalten. Ich habe mich für den wmi-client-wrapper entschieden Python-Modul. Um dies zu installieren:
> sudo pip install wmi-client-wrapper
Erstellen Sie nach der Installation ein Python-Skript, um es zu testen. So sah meins aus, vorausgesetzt, Sie haben Python 2.x installiert. Wenn Sie Python 3.x haben, wird Ihre oberste Zeile wahrscheinlich
lauten#!/usr/bin/python3
#!/usr/bin/python
import wmi_client_wrapper as wmi
wmic = wmi.WmiClientWrapper(username="localaccount",password="localpassword",host="<HostNameOrIpAddress>",)
output = wmic.query("SELECT * FROM Win32_Processor")
print(output)
## Save this as <FileName>.py and mark is as executable:
chmod +x <FileName>.py
## Then, we can execute the script to see if it brings back the Win32_Processor class.
[{'L2CacheSize': '0', 'VMMonitorModeExtensions': False, 'ConfigManagerErrorCode': '0', 'VoltageCaps': '0', 'PowerManagementSupported': False, 'LoadPercentage': '1', 'CreationClassName': 'Win32_Processor', 'Version': '', 'Role': 'CPU', 'CpuStatus': '1', 'SecondLevelAddressTranslationExtensions': False, 'Revision': '11527', 'Status': 'OK', 'PNPDeviceID': None, 'L2CacheSpeed': '0', 'AddressWidth': '64', 'ConfigManagerUserConfig': False, 'ErrorCleared': False, 'ProcessorId': '0F8BFBFF000206D7', 'ProcessorType': '3', 'DeviceID': 'CPU0', 'CurrentVoltage': '12', 'CurrentClockSpeed': '2600', 'Manufacturer': 'GenuineIntel', 'Name': 'Intel(R) Xeon(R) CPU E5-2670 0 @ 2.60GHz', 'InstallDate': None, 'Level': '6', 'SocketDesignation': 'None', 'NumberOfCores': '1', 'Caption': 'Intel64 Family 6 Model 45 Stepping 7', 'StatusInfo': '3', 'Architecture': '9', 'UniqueId': None, 'PowerManagementCapabilities': 'NULL', 'OtherFamilyDescription': None, 'Description': 'Intel64 Family 6 Model 45 Stepping 7', 'NumberOfLogicalProcessors': '1', 'Family': '179', 'ErrorDescription': None, 'UpgradeMethod': '6', 'SystemName': 'HOSTNAME', 'LastErrorCode': '0', 'ExtClock': '8000', 'Stepping': None, 'VirtualizationFirmwareEnabled': False, 'MaxClockSpeed': '2600', 'L3CacheSize': '0', 'L3CacheSpeed': '0', 'Availability': '3', 'SystemCreationClassName': 'Win32_ComputerSystem', 'DataWidth': '64'}]
Yay! Die Ausgabe ist JSON und an dieser Stelle ziemlich knorrig, aber im Moment wollte ich nur damit anfangen. Ich hoffe, dies hilft jedem, der versucht, Python dazu zu bringen, WMI auf einem Remote-Computer unter Linux abzufragen!