Saya baru-baru ini bermain dengan Ansible sedikit dan, sayangnya, itu hanya tersedia di Linux. Menjadi orang Windows yang besar, saya harus belajar banyak tentang bagaimana Linux dan Python berinteraksi dengan Windows. Tujuan saya adalah mendapatkan kotak Linux Ubuntu saya menggunakan Python untuk menanyakan WMI. Mari kita hancurkan!
Mengunduh WMIC di Linux
Tugas pertama adalah menanyakan kelas WMI umum pada kotak Windows. Untuk melakukan ini di Linux, kita perlu mengunduh dan mengkompilasi paket WMIC. Untuk melakukan ini, lihat GitHub Gist ini. Bagi siapa pun yang terlalu malas untuk mengeklik tautan, inilah yang harus dijalankan untuk mewujudkannya.
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"
Jika Anda melihat properti dan nilai Win32_OperatingSystem, Anda baik-baik saja!
WMI dengan Python
Langkah selanjutnya adalah mendapatkan modul WMI untuk Python. Saya memilih untuk menggunakan wmi-client-wrapper Modul Python. Untuk menginstal ini:
> sudo pip install wmi-client-wrapper
Setelah terinstal, buat skrip Python untuk mengujinya. Inilah yang tampak seperti milik saya dengan asumsi Anda telah menginstal Python 2.x. Jika Anda memiliki Python 3.x, baris teratas Anda mungkin akan terbaca
#!/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'}]
Ya! Outputnya adalah JSON dan cukup kasar pada saat ini tetapi, untuk saat ini, saya hanya ingin menjalankannya. Saya harap ini membantu siapa pun yang mencoba membuat Python untuk menanyakan WMI di komputer jarak jauh di Linux!