Usuario:Luis.perez/sistemaspyaytozgz/windows

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
 * Descargar e instalar pip https://raw.github.com/pypa/pip/master/contrib/get-pip.py


 * Instalar PyWin32
 * Instalar Winsys

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:


 * 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:


 * Métodos factoría: Existen métodos a nivel de módulo para obtener instancias de objetos. Ej:

Módulo security
Módulo que da acceso y gestiona las ACLs de objetos (ficheros, claves del registro...). Implementa la clase Security.

Obtener el objeto Security

 * Puede hacerse mediante la función security:


 * o mediante el método security de algunos objetos

Listas de control de acceso
Podemos añadir nuevos permisos:

Constantes:

ACCESS = { u"R" : constants.GENERIC_ACCESS.READ, u"W" : constants.GENERIC_ACCESS.WRITE, u"X" : constants.GENERIC_ACCESS.EXECUTE, u"C" : constants.GENERIC_ACCESS.READ | constants.GENERIC_ACCESS.WRITE | constants.GENERIC_ACCESS.EXECUTE, u"F" : constants.GENERIC_ACCESS.ALL }

Entorno del sistema
La modificación de ambos diccionarios actualiza los entornos

Creación de un usuario
atención: El usuario no se incluye en ningún grupo

Eliminación de un usuario
También un objeto Princpal puede usarse:

Obtención de un grupo
ó

Asociación de un usuario a un grupo
Atención: En la última versión de Winsys parece haber un bug en el api de la clase accounts.User. Aunque existe el método join, el siguiente código no funcionará, debido a que join busca el grupo con accounts.group, el cual devuelve un objeto de tipo Group, no LocalGroup, que no tiene el método add para añadir el usuario a sus miembros:

Eliminación de un usuario de un grupo
Igual que en el caso de añadir usuarios a grupos, el método leave de la clase User presenta el mismo problema que join

Windows Management Instrumentation: WMI

 * Wrapper alrededor de pywin32 para acceder al api WMI

Instalación
http://pypi.python.org/pypi/WMI/#downloads

Sobre los sources descargados.
 * Puede instalarse ejecutando el exe instalador, o bien haciendo

Obtención del interfaz
Basta con importar wmi e invocar a su método WMI.


 * Como se ve en el ejemplo, se puede obtener información deº qué clases de WMI expone.
 * Para acceder a una de esas clases:


 * También se puede acceder a una máquina remota:

ó
 * Para poder conectar con otro user/pass:


 * Para conocer atributos del objeto:


 * Se pueden filtrar los objetos que se devuelven, pasando valores de propiedades del objeto:


 * Se puede obtener directamente un objeto conociendo su moniker


 * ...y obtener un objeto filtrado:


 * Usar una consulta WQL

Matar un proceso
o por pid (el anterior ejemplo matará todos los procesos de firefox):