Diferencia entre revisiones de «Usuario:Luis.perez/sistemaspyaytozgz/windows»

De WikiEducator
Saltar a: navegación, buscar
m (WMI)
(WINSYS)
Línea 176: Línea 176:
 
...
 
...
 
</source>
 
</source>
 +
 +
==== Gestión de usuarios y grupos ====
  
 
=== Windows Management Instrumentation: WMI ===
 
=== Windows Management Instrumentation: WMI ===

Revisión de 00:45 12 ene 2013

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

 
   $ python distribute_setup.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
...

Gestión de usuarios y grupos

Windows Management Instrumentation: WMI

  • Wrapper alrededor de pywin32 para acceder al api WMI



Icon inter.gif

Documentación



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)