Il était nécessaire de collecter diverses informations sur des centaines de PC clients, et j'ai aimé écrire du code Python, c'est donc un mémo à ce moment-là. À propos, il est supposé être dans un environnement de domaine AD.
Vérifiez si les services suivants sont en cours d'exécution sur le PC distant. S'il ne semble pas en cours d'exécution, configurez-le pour qu'il démarre automatiquement selon la stratégie de groupe ou la force.
Reportez-vous à la page suivante et activez la connexion RPC du PC distant à l'aide de la stratégie de groupe. Activer la gestion à distance du pare-feu Windows
Pour refléter immédiatement la stratégie de groupe, appliquez-la du côté du PC distant.
cmd.exe
gpupdate /force
Installez les modules requis pour WMI du côté de la connexion à distance (environnement d'exécution de code Python).
pip install pypiwin32
pip install wmi
sample.py
# coding: utf-8
import wmi
NODE = "host-1.example.local"
USER = "Administrator@MYDOMAIN"
PASS = "P@ssW0rd!"
##Initialisation du client WMI (lors de la connexion à un PC local)
#conn = wmi.WMI()
##Initialisation du client WMI (lors de la connexion à un PC distant)
conn = wmi.WMI(NODE, user=USER, password=PASS)
#Obtenir le nom de l'ordinateur
# Win32_OperatingSystem => http://www.wmifun.net/library/win32_operatingsystem.html
obj = conn.Win32_OperatingSystem()[0]
print("Hostname: %s" % obj.CSName)
##Vérification de l'espace libre du lecteur C(Unité GB, jusqu'à 2 chiffres après la virgule décimale)
## Win32_Classe LogicalDisk=> http://www.wmifun.net/library/win32_logicaldisk.html
obj = conn.Win32_LogicalDisk(DeviceID='C:')[0]
free = float(obj.FreeSpace) / 1024 / 1024 / 1024
print('FreeSpace: {:.2f}'.format(free))
##Confirmer le compte utilisateur actuellement connecté
## Win32_Classe ComputerSystem=> http://www.wmifun.net/library/win32_computersystem.html
obj = conn.Win32_ComputerSystem()[0]
print("LogonUser: %s" % obj.UserName)
##Confirmation du numéro de série du PC (numéro de série)
## Win32_Classe ComputerSystemProduct=> http://www.wmifun.net/library/win32_computersystemproduct.html
obj = conn.Win32_ComputerSystemProduct()[0]
print("SerialNo: %s" % obj.IdentifyingNumber)
##Exécution de la commande
## Win32_Classe de processus=> http://www.wmifun.net/library/win32_process.html
CMD = "notepad.exe"
CUD = None
##Caractère séparateur pour le chemin complet(\)Plus d'évasion
#CMD = "C:\\Users\\Public\\Desktop\\example.exe"
#CUD = "C:\\Users\\Public\\Desktop"
SW_SHOWNORMAL = 1
p_startup = conn.Win32_ProcessStartup.new()
p_startup.ShowWindow = SW_SHOWNORMAL
pid, result = conn.Win32_Process.Create(
CommandLine=CMD,
CurrentDirectory=CUD,
ProcessStartupInformation=p_startup
)
if result == 0:
print "ProcessId: %d" % pid
else:
raise RuntimeError, "Problem creating process: %d" % result
Résultat d'exécution
% python sample.py
Hostname: HOST-1
FreeSpace: 18.53
LogonUser: MYDOMAIN\user001
SerialNo: JPA12345LF
ProcessId: 3784
--Lors de l'exécution d'une application sur un PC distant, l'écran ne s'affiche pas pour les applications interactives (Bloc-notes, etc.). Ceci est une spécification de sécurité. (> = Windows XP SP3?)
Recommended Posts