José Miguel's profileLa sala de máquinasPhotosBlogListsMore ![]() | Help |
La sala de máquinas |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
October 17 PowerShell: Grabar eventos en el registro de eventos
Creo que fue Trajano el que dijo "Lo que no está en los archivos del imperio, no ha ocurrido nunca" y es cierto, porque aunque haya podido ocurrir, a todos los efectos es como si no. Me acuerdo muchas veces de esta frase cuando ocurren errores en cualquiera de los programas y sistemas que me toca controlar. Lees el mensaje de error, no dice nada más que lo obvio, miras los posibles registros de la aplicación y tampoco, miras el registro de eventos de Windows y nada. Que esto nos lo hagan los demás, molesta. Si nos lo hacemos nosotros, no tiene perdón. PowerShell es un potente lenguaje basado en objetos que nos permite acceder a casi cualquier cosa de nuestro sistema, hardware o software. Hasta aquí todo bien. Hasta tenemos un commandlet que nos permite leer el registro de eventos fácilmente (Get-Eventlog). ¿Si tenemos un registro de eventos, por qué no podemos escribir en él desde PowerShell? La respuesta es que sí podemos pero nadie pensó en hacer un commandlet para ello. Veamos cómo hacerlo: Para empezar instanciamos un objeto de la clase Eventlog $EventLog = New-Object System.Diagnostics.EventLog
Este objeto tiene múltiples miembros pero para escribir nuestra entrada bastarán tres de ellos que explico a continuación. Lo primero es especificar quien o qué va a grabar el evento en el registro. Normalmente es el nombre de la aplicación, subsistema o driver y debe estar asociado a uno de los registros (Aplicación, Seguridad, Sistema, etc) para poder usarse. En nuestro caso el origen de eventos será PowerShell y ya se halla asociado a su propio registro, así que especificar el origen del evento será tan fácil como asignar el valor PowerShell a la propiedad Source. $EventLog.Source = "PowerShell" Lo siguiente es indicar en cual de los registros se ha de grabar el evento. Tradicionalmente los registros eran Aplicación, Seguridad y Sistema pero pueden haber más creados por aplicaciones o servicios. PowerShell no es una excepción y al instalarse crea su propio registro llamado Windows PowerShell al cual se asocia como origen de eventos. Esto es importante ya que impedirá a PowerShell escribir en otro registro a no ser que lo reasociemos pero eso se escapa al alcance de este artículo. La manera de indicar que vamos a grabar nuestro evento en el registro Windows PowerShell es usando la propiedad Log: $EventLog.Log = "Windows PowerShell" Finalmente grabaremos el evento usando el método WriteEntry. Este método admite cuatro parámetros:
Así pues, después de esto la instrucción para grabar nuestra entrada en el registro podría quedar así: $EventLog.WriteEntry("La ejecución terminó correctamente", "Information", 65000, 0) Si alguien quiere saber más sobre los miembros de la clase Eventlog, puede hacerlo desde PowerShell con: get-member -inputobject $Eventlog | Format-List Si lo que queremos ya es crear nuestras propias categorías, registrar PowerShell en otro registro o complicarnos la vida de mil maneras no debemos dejar de pasarnos por el siguiente enlace. http://msdn.microsoft.com/en-us/library/system.diagnostics.eventlog.aspx Hasta la próxima. July 10 Propiedades de la clase User en Active Directory: I - la pestaña "General" y las propiedades identificativas
Active Directory no sólo se limita a almacenar cuentas de usuario y máquinas, además constituye un completo repositorio donde guardar datos de nuestra organización. No sólo cuenta con múltiples clases con decenas de propiedades cada una sino que su estructura interna (esquema) se puede extender para adaptarse a nuestras necesidades. Sin embargo pocas veces se emplea para poco más que guardar los datos que en él graban las aplicaciones de Microsoft. No conozco encuestas al respecto pero me atrevería a decir que entre las razones figuran el desconocimiento de su esquema, su distancia del modelo relacional al que muchos estamos habituados y la falta de herramientas "amigables" para la manipulación masiva de valores. En esta serie de artículos intentaré documentar una de las clases más familiares al administrador; la clase User. Empezaremos por la pestaña "General" y sus propiedades identificativas. Las utilidades de conocer estas propiedades pueden ser múltiples pero se resumen en tres
Para ello es necesario tener nociones de algún lenguaje de scripting. Aquí emplearemos VBScript. Si queréis información sobre VBScript podéis encontrarla en: http://www.microsoft.com/technet/scriptcenter/guide/sas_ads_overview.mspx?mfr=true (inglés) De momento crearemos un nuevo usuario, repasaremos sus propiedades y lo verificaremos con un pequeño script que, de paso, nos servirá como punto de partida para ir complicándolo o para ir creando otros. ¡Vamos allá! CREANDO UN NUEVO USUARIOCuando creamos un nuevo usuario, se nos solicitan valores para tan sólo unas pocas de las muchísimas propiedades que posee la clase User. Son los que llamaremos propiedades identificativas. Las únicas obligatorias son "Nombre completo", "Nombre de inicio de sesión de usuario" y "Contraseña". El "Nombre completo" puede rellenarse directamente o rellenarse automáticamente a partir de los valores "Nombre", "Iniciales" y "Apellidos". Igualmente la propiedad "Nombre de inicio de sesión de usuario (anterior a Windows 2000)" puede rellenarse directamente o tomar el valor de "Nombre de inicio de sesión de usuario". Hasta aquí todo va bien, pero a partir de ahora empezamos a notar cosas curiosas que llevan a confusiones. Para empezar, vemos una columna llamada "Nombre para mostrar" de la que no sabíamos nada hasta ahora. Con todo esto, nuestro usuario tiene ya cinco propiedades llamadas "Nombre algo". Además si seleccionamos el contenedor "Users" en "Usuarios y equipos de Active Directory" veremos que el valor que nos muestra la columna "Nombre" no se corresponde con el que habíamos introducido en el campo "Nombre" al crear el usuario. Lamentablemente y resumiendo, los nombres de las propiedades de la clase User, los de las cajas de texto que muestran sus valores y los de las columnas de "Usuarios y equipos de Active Directory" no coinciden. Para acabarlo de arreglar, los que trabajamos en castellano tenemos una traducción por el medio. Vamos a ver cómo se relacionan. Para empezar diremos que aún hay otra propiedad "Nombre algo" que es la que identifica unívocamente al usuario. Afortunadamente Active Directory se ha encargado de generarla por nosotros y no la muestra, desafortunadamente una propiedad así es demasiado útil como para no conocerla. Hablo de la propiedad "cn", abreviatura de "common name". Más adelante, cuando conectemos con Active Directory, usaremos esta propiedad para seleccionar a nuestro usuario. ¿Pero que valor ha dado Active Directory a esta propiedad? El valor que adopta esta propiedad es el valor final de la caja de texto "Nombre completo". PROPIEDADES DE LA CAJA DE DIALOGO "Nuevo objeto - Usuario"
Si ahora echamos un ojo a la pestaña "General" veríamos que quedan varias propiedades por rellenar y de las que tampoco se nos ha dicho nada al crear el usuario. Sus correspondencias son las que muestro a continuación. PROPIEDADES DE LA PESTAÑA "General"
COMPROBANDO QUE ESTO ES ASIPara verificar todo lo anterior, he creado un pequeño script que consulta esas propiedades y las muestra por pantalla. El resultado es algo parecido a esto pero sin equivocarse de ruta como yo :-): SCRIPT DE VERIFICACION'========================================================================== '* Para referencias sobre VBScript ver: Option Explicit '*************************** Const ERRORS = 1 '*************************** Set objShell = WScript.CreateObject("WScript.Shell") Set objUser = GetObject("LDAP://cn=Antonio B.. Martín,cn=Users,dc=certia,dc=net") If Err.Number <> 0 Then WScript.Echo "Nombre: " & objUser.givenName objShell.LogEvent INFORMATION, "La relación de atributos terminó con éxito." WScript.Quit Sub ErrorHandle February 25 PresentaciónLa sala de máquinas pretende ser un blog donde se hable de asuntos relacionados con los sistemas. Así, en general. A fin de cuentas todos están relacionados entre sí y el barco sólo llega a puerto con todos ellos funcionando correctamente. Como en un barco los sufridos maquinistas se ven sometidos a demandas y exigencias a menudo contradictorias y que habrán de saber equilibrar. El capitán, la tripulación, los propietarios de la carga, las propias máquinas y los elementos. Y el jefe de máquinas en el medio. |
There are no categories in use.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|