私は最近、Ansible をかなりいじっていますが、残念ながら、Ansible は Linux でしか利用できません。私は Windows 好きなので、Linux と Python が Windows とどのように相互作用するかについて多くのことを学ばなければなりませんでした。私の目標は、Python を使用して WMI を照会する Ubuntu Linux ボックスを取得することでした。分解してみましょう!
Linux での WMIC のダウンロード
最初のタスクは、Windows ボックスで共通の WMI クラスを照会することでした。 Linux でこれを行うには、WMIC パッケージをダウンロードしてコンパイルする必要があります。これを行うには、この GitHub Gist を確認してください。リンクをクリックするのが面倒な人のために、何を実行すればよいかを説明します。
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"
Win32_OperatingSystem のプロパティと値が表示されれば成功です!
Python での WMI
次のステップは、Python 用の WMI モジュールを入手することです。 wmi-client-wrapper を使用することにしました Python モジュール。これをインストールするには:
> sudo pip install wmi-client-wrapper
インストールしたら、Python スクリプトを作成してテストします。 Python 2.x がインストールされていると仮定すると、私の場合は次のようになります。 Python 3.x を使用している場合、一番上の行はおそらく次のようになります
#!/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'}]
わーい!出力は JSON であり、この時点では非常に危険ですが、今のところ、これを実行したかっただけです。これが、Linux 上のリモート コンピューターで Python に WMI をクエリさせようとしている人の助けになることを願っています!