Diferencia entre revisiones de «Usuario:Luis.perez/sistemaspyaytozgz/windows»
De WikiEducator
(→Instalación de pywin32) |
m (→WMI) |
||
Línea 177: | Línea 177: | ||
</source> | </source> | ||
− | === WMI === | + | === Windows Management Instrumentation: WMI === |
+ | |||
+ | * Wrapper alrededor de pywin32 para acceder al api WMI | ||
+ | |||
+ | {{Recursos de la Web |Title=Documentación| | ||
+ | * Documentación del módulo WMI para python: http://timgolden.me.uk/python/wmi/contents.htmlhttp://python.org/doc | ||
+ | * Documentación sobre WMI en MSDN: http://msdn2.microsoft.com/en-us/library/aa394582.aspx | ||
+ | }} | ||
+ | |||
+ | ==== Instalación ==== | ||
+ | |||
+ | http://pypi.python.org/pypi/WMI/#downloads | ||
+ | |||
+ | * Puede instalarse ejecutando el exe instalador, o bien haciendo | ||
+ | <source lang="bash"> | ||
+ | python setup.py install | ||
+ | </source> | ||
+ | Sobre los sources descargados. | ||
+ | |||
+ | |||
+ | ==== Obtención del interfaz ==== | ||
+ | |||
+ | Basta con importar wmi e invocar a su método WMI. | ||
+ | |||
+ | <source lang="python"> | ||
+ | import wmi | ||
+ | |||
+ | c = wmi.WMI () | ||
+ | for i in c.classes: | ||
+ | print i | ||
+ | </source> | ||
+ | |||
+ | * Como se ve en el ejemplo, se puede obtener información de qué clases de WMI expone. | ||
+ | * Para acceder a una de esas clases: | ||
+ | |||
+ | <source lang="python"> | ||
+ | c = wmi.WMI () | ||
+ | for os in c.Win32_OperatingSystem(): # Siempre devuelve una lista, aunque sepamos que hay un solo objeto | ||
+ | print(os.Caption) | ||
+ | </source> | ||
+ | |||
+ | * También se puede acceder a una máquina remota: | ||
+ | <source lang="python"> | ||
+ | c = wmi.WMI("maquinaremota") | ||
+ | </source> | ||
+ | |||
+ | * Para poder conectar con otro user/pass: | ||
+ | <source lang="python"> | ||
+ | c = wmi.WMI("MyOtherMachine", user=r"MyOtherMachine\luis", password="mypassword") | ||
+ | </source> | ||
+ | ó | ||
+ | <source lang="python"> | ||
+ | remote_connetion = wmi.connect_server ( | ||
+ | server="MyOtherMachine", user="luis", password="mypassword" | ||
+ | ) | ||
+ | c = wmi.WMI(wmi=remote_connection) | ||
+ | </source> | ||
+ | |||
+ | * Para conocer atributos del objeto: | ||
+ | <source lang="python"> | ||
+ | c = wmi.WMI () | ||
+ | for os in c.Win32_OperatingSystem(): | ||
+ | print(os.properties) | ||
+ | print(os.methods) | ||
+ | </source> | ||
+ | |||
+ | * Se pueden filtrar los objetos que se devuelven, pasando valores de propiedades del objeto: | ||
+ | <source lang="python"> | ||
+ | c = wmi.WMI () | ||
+ | for disk in c.Win32_LogicalDisk(Caption="E:"): | ||
+ | print(disk) # devolverá solo la unidad "E:" | ||
+ | </source> | ||
+ | |||
+ | * Se puede obtener directamente un objeto conociendo su ''moniker'' | ||
+ | <source lang="python"> | ||
+ | disks = wmi.WMI(moniker="//./root/cimv2:Win32_LogicalDisk") | ||
+ | </source> | ||
+ | |||
+ | * ...y obtener un objeto filtrado: | ||
+ | <source lang="python"> | ||
+ | disks = wmi.WMI(moniker='//./root/cimv2:Win32_LogicalDisk.Description="Mi unidad de red"') | ||
+ | </source> | ||
+ | |||
+ | * Usar una consulta WQL | ||
+ | <source lang="python"> | ||
+ | c = wmi.WMI() | ||
+ | wql = "SELECT Caption, Description FROM Win32_LogicalDisk WHERE DriveType <> 3" | ||
+ | for disk in c.query(wql): | ||
+ | print(disk) | ||
+ | </source> |
Revisión de 22:16 11 ene 2013
Contenido
- 1 Administración de Windows con python
- 1.1 Python for Windows extensions: PyWin32
- 1.2 WINSYS
- 1.2.1 Instalación
- 1.2.2 Características comunes del api
- 1.2.3 Api del registro de windows
- 1.2.3.1 obtener una key del registro
- 1.2.3.2 obtener subkey
- 1.2.3.3 iterator de keys
- 1.2.3.4 obtener padre:
- 1.2.3.5 copiar una key del registro
- 1.2.3.6 crear una key
- 1.2.3.7 eliminar una key
- 1.2.3.8 asignar valores del registro
- 1.2.3.9 obtener valores del registro
- 1.2.3.10 obtener valores del registro
- 1.2.3.11 walk dentro de una clave (similar a lo que hace os.walk para ficheros y directorios
- 1.2.3.12 Add permisos totales a un usuario
- 1.2.4 Api del entorno de windows
- 1.3 Windows Management Instrumentation: WMI
- 2 Documentación
Administración de Windows con python
Python for Windows extensions: PyWin32
Es un wrapper alrededor del api win32 implementado con SWIG.
Instalación de pywin32
a) versión 214 con pip (versión antigua de hace 3 años) b) versión reciente, 218, desde http://sourceforge.net/projects/pywin32/files/pywin32/Build%20218/pywin32-218.win32-py3.3.exe/download
- Usaremos la versión más reciente, con python 3.3
WINSYS
https://github.com/tjguk/winsys
- Wrapper alrededor de pywin32 para hacerla más "pythonic"
Instalación
- Instalar pip (instalar distribute primero)
- Descargar e instalar distribute http://python-distribute.org/distribute_setup.py
$ python distribute_setup.py
- Descargar e instalar pip https://raw.github.com/pypa/pip/master/contrib/get-pip.py
$ python get-pip.py
- Instalar PyWin32
- Instalar Winsys
$ pip install WinSys-3.x
Características comunes del api
- La mayoría de clases extienden de core._WinsysObject
- dump _WinSysObject tiene un método dump que devuelve una representación de las estructuras internas del objeto. Ej:
reg = registry.registry(r"HKLM\Software\View\Gvim") >>> reg.dump() { HKLM\Software\View\Gvim access: 983103 }
- Funciones a nivel de módulo: Normalmente, si una clase de un módulo tiene un método, suele existir uno correspondiente a nivel del módulo, a fin de facilitar el uso cuando no se desea tener que crear u obtener el objeto. Ejemplo:
reg = registry.registry(r"HKLM\Software\View\Gvim") reg.delete() # en lugar de lo anterior, podemos hacer directamente: registry.delete(r"HKLM\Software\View\Gvim")
- Métodos factoría: Existen métodos a nivel de módulo para obtener instancias de objetos. Ej:
reg = registry.registry(r"HKLM\Software\View\Gvim") # además de reg = registry.Registry(r"HKLM\Software\View\Gvim")
Api del registro de windows
obtener una key del registro
new_key = registry.registry (r"HKLM\Software\Vim\Gvim") base = registry.registry(r"HKLM\Software") gvim2 = base + "Gvim" # se puede usar el operador + para concatenar
obtener subkey
subk = base.gvim
iterator de keys
for key in base.keys(): print(key) #key es de tipo registry
obtener padre:
parent = key.parent() parent = registry.parent(key)
copiar una key del registro
new_key = registry.copy (r"HKLM\Software\Vim\Gvim", r"HKLM\Software\Vim\Gvim2")
crear una key
gvim2.create("subkey") registry.create(gvim2, "subkey")
eliminar una key
gvim2.delete("subkey") # alternativo: registry.delete(gvim2, "subkey") gvim2.delete() #alternativo: registry.delete(gvim2)
asignar valores del registro
new_key.myvalue = 5 new_key.set_value('myvalue', 2)
obtener valores del registro
print("Obteniendo valores dentro de una key") avalue = new_key.myvalue avalue = new_key.get_value('myvalue')
obtener valores del registro
for name, value in new_key.values(): print("name: {}, value: {}".format(name, value)) values_dict = dict(new_key.values())
walk dentro de una clave (similar a lo que hace os.walk para ficheros y directorios
for key, subkeys, values in base.walk(): #key es de tipo registry #subkeys es una iterator de tipo registry #values es un iterator de tuplas nombre-valor pass
Add permisos totales a un usuario
try: with new_key.security () as sec: sec.break_inheritance (copy_first=False) sec.dacl.append(accounts.user("luis", "F", "ALLOW")) finally: new_key.security().dump ()
Api del entorno de windows
from winsys import environment
Entorno del usuario
>>>> environment.user() {'TMP': 'C:\\Documents and Settings\\luis\\Temp', 'TEMP':'C:\\Documents and Settings\\luis\\Temp'}
Entorno del sistema
>>>> environment.system() 'NUMBER_OF_PROCESSORS': '1', 'PROCESSOR_IDENTIFIER': 'x86 Family 6 Model 42 Stepping 7, GenuineIntel', 'PATHEXT': '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH', 'windir': 'C:\\WINDOWS', 'PROCESSOR_LEVEL': '6', 'FP_NO_HOST_CHECK': 'NO', 'ComSpec': 'C:\\WINDOWS\\system32\\cmd.exe', 'Path': 'C:\\Python33\\;C:\\WINDOWS\\system32;C:\\WINDOWS;C:\\WINDOWS\\System32\\Wbem;C:\\Python33\\Scripts;C:\\C ...
Windows Management Instrumentation: WMI
- Wrapper alrededor de pywin32 para acceder al api WMI
|
Instalación
http://pypi.python.org/pypi/WMI/#downloads
- Puede instalarse ejecutando el exe instalador, o bien haciendo
python setup.py install
Sobre los sources descargados.
Obtención del interfaz
Basta con importar wmi e invocar a su método WMI.
import wmi c = wmi.WMI () for i in c.classes: print i
- Como se ve en el ejemplo, se puede obtener información de qué clases de WMI expone.
- Para acceder a una de esas clases:
c = wmi.WMI () for os in c.Win32_OperatingSystem(): # Siempre devuelve una lista, aunque sepamos que hay un solo objeto print(os.Caption)
- También se puede acceder a una máquina remota:
c = wmi.WMI("maquinaremota")
- Para poder conectar con otro user/pass:
c = wmi.WMI("MyOtherMachine", user=r"MyOtherMachine\luis", password="mypassword")
ó
remote_connetion = wmi.connect_server ( server="MyOtherMachine", user="luis", password="mypassword" ) c = wmi.WMI(wmi=remote_connection)
- Para conocer atributos del objeto:
c = wmi.WMI () for os in c.Win32_OperatingSystem(): print(os.properties) print(os.methods)
- Se pueden filtrar los objetos que se devuelven, pasando valores de propiedades del objeto:
c = wmi.WMI () for disk in c.Win32_LogicalDisk(Caption="E:"): print(disk) # devolverá solo la unidad "E:"
- Se puede obtener directamente un objeto conociendo su moniker
disks = wmi.WMI(moniker="//./root/cimv2:Win32_LogicalDisk")
- ...y obtener un objeto filtrado:
disks = wmi.WMI(moniker='//./root/cimv2:Win32_LogicalDisk.Description="Mi unidad de red"')
- Usar una consulta WQL
c = wmi.WMI() wql = "SELECT Caption, Description FROM Win32_LogicalDisk WHERE DriveType <> 3" for disk in c.query(wql): print(disk)