Mostrando entradas con la etiqueta scripts. Mostrar todas las entradas
Mostrando entradas con la etiqueta scripts. Mostrar todas las entradas

sábado, enero 14, 2012

Perl, buscar texto dentro de ficheros


Utilizaremos las variables especiales $ARG y $ARGV.

Queremos pasarle como argumentos a nuestro programa el nombre de varios ficheros de texto, y él nos dirá si encuentra el texto en alguno de ellos.


use English;
while(<>){
if($ARG=~/texto de prueba/){
print " Encontrado\n $ARG\n en $ARGV\n\n\n";
}
}

Para que nos reconozca correctamente los términos $ARG y $ARGV tenemos que indicar el "use English". Es para poder usar el módulo English.pm.

$ARG es la entrada y patrón de búsqueda por defecto. En el sitio dónde lo hemos puesto va cogiendo el nombre de cada argumento que le hemos pasado de esta forma:
$buscar.pl fichero1 fichero2 fichero3

$ARGV contiene el nombre del fichero actual que está tratando el bucle.

El bucle recorrerá todos los ficheros que pasemos como argumento. En la IF preguntamos si el fichero cumple la condición de tener ese texto dentro (patrón). Si lo tiene indicamos lo que ha encontrado, y también en qué fichero lo ha hecho.

La ejecución:

$ perl buscar.pl fichero1 fichero2 fichero3
Encontrado
texto de prueba
en fichero2

Saludos.

lunes, mayo 23, 2011

Un script para interrogar al active directory

Hace más de 2 años que no hacía un script de Windows. Aquel servía para obtener información de los PC-s de la red. También puse unos links interesantes.

Este de aquí sirve para visualizar los miembros de un grupo del directorio activo:



Set objetoGrupo = GetObject("LDAP://cn=GrupoX,cn=Users,dc=DominioDeEjemplo,dc=es")
Call EnumerarMiembros(objetoGrupo)

Sub EnumerarMiembros(objetoGrupo)
For Each objetoMiembro In objetoGrupo.Members
Wscript.Echo "Miembro: " & objetoMiembro.sAMAccountName _
& " (" & objetoMiembro.Class & ")"
If (LCase(objetoMiembro.Class) = "group") Then
Call EnumerarMiembros(objetoMiembro)
End If
Next
End Sub




En este ejemplo que es ligeramente diferente a los que se suelen ver por ahí, el grupo se busca en la Unidad Organizativa "Users".

GrupoX es el grupo que buscamos.

Y por último el dominio del ejemplo es DominioDeEjemplo.es

Saludos.

jueves, mayo 05, 2011

Perl para monitorizar la red


Estábamos sufriendo pequeños cortes de red muy esporádicos (digamos que 3 ó 4 al día).
Necesitaba registrar la fecha y hora para que los técnicos de comunicaciones supieran dónde buscar...

Podría haber utilizado cualquier software comercial pero preferí hacer el siguiente script PERL:

Funciona perfectamente con la instalación por defecto de ActivePerl para Windows:
#!/usr/bin/perl -w
use Net::Ping;

my $p = Net::Ping->new("icmp");
my @servidores=('servidor1','servidor2','servidor3','servidor4');
open(FICHERO, ">>errores.txt")||die "error!!!";
print FICHERO "EMPEZAMOS ANALISIS\n";
fechaHora();
print FICHERO "----------------------------------\n";
close(FICHERO);
for(;;) {
foreach my $host (@servidores)
{
if ($p->ping($host, 2)) {
print "$host OK!\n"
}
else {
open(FICHERO, ">>errores.txt")||die "error!!!";
print FICHERO "FALLO en $host. ";
fechaHora();
close(FICHERO);
}
sleep(1);
}
}
$p->close();

sub fechaHora {
my ($sec,$min,$hour,$day,$month,$yr20,@rest) = localtime(time);
print FICHERO "$day-".++$month. "-".($yr20+1900)." ";
print FICHERO sprintf("%02d",$hour).":".sprintf("%02d",$min).":".sprintf("%02d",$sec)."\n";
}


El funcionamiento es muy sencillo:

Creamos un array con los nombres de los servidores a los que el programa va a hacer continuamente PING.

Luego se intenta el PING. Si el servidor responde escribimos SERVIDOR OK. Si no responde abrimos el fichero ERRORES.TXT y escribimos la fecha y hora.

Curiosidades:

Cada vez que falla un PING abrimos el fichero, escribimos y volvemos a cerrar.
Lo tuve que hacer así porque el bucle infinito hay que terminarlo con Control+C o cerrando la ventana. Al interrumpir el programa antes de cerrar el fichero resulta que te encuentras con un ERRORES.TXT vacío.

Saludos.




jueves, julio 01, 2010

Python para administrar Oracle


Hola amig@s,

Casi 10 días sin postear. No puede ser. La verdad es que ando liadísimo con un montón de historias.

El último post iba sobre Python y quiero continuar en la misma línea. Me he propuesto trabajar con scripts Python lanzados desde el escritorio Windows. De esta forma creo que puedo conseguir realizar los trabajos de administración de forma más automatizada y rápida.

Hoy me centraré en la instalación inicial.

Descarga de python 3.1.2:
http://www.python.org/download/releases/3.1.2/

Paquetes python:
http://pypi.python.org/pypi/

Para trabajar con Oracle necesitamos el Paquete cx_oracle 5.0.3
http://pypi.python.org/pypi/cx_Oracle/5.0.3

Descarga del paquete cx_oracle 5.0.3:
http://cx-oracle.sourceforge.net/

Después de la instalación podemos ver la información que el propio Oracle nos da sobre las conexiones desde Python:

http://www.oracle.com/technology/pub/articles/devlin-python-oracle.html

http://www.oracle.com/technology/pub/articles/prez-python-queries.html

Saludos.

lunes, junio 21, 2010

Envío de correos con python

Hola,
Se me ocurre que tal vez te interese automatizar un envío por correo automático.

Puede ser que tengas que enviar un mensaje a una lista de destinatarios variable, o símplemente quieras realizar algunas tareas a una hora concreta y enviar el resultado.
En http://win32com.goermezer.de/content/view/227/192/ tenéis el script para enviar un mensaje por medio del Outlook:


import win32com.client

def send_mail_via_com(text, subject, recipient, profilename="Outlook2003"):
s = win32com.client.Dispatch("Mapi.Session")
o = win32com.client.Dispatch("Outlook.Application")
s.Logon(profilename)

Msg = o.CreateItem(0)
Msg.To = recipient

Msg.CC = "moreaddresses here"
Msg.BCC = "address"

Msg.Subject = subject
Msg.Body = text

attachment1 = "Path to attachment no. 1"
attachment2 = "Path to attachment no. 2"
Msg.Attachments.Add(attachment1)
Msg.Attachments.Add(attachment2)

Msg.Send()

jueves, febrero 25, 2010

Manipular el inicio o apagado en Windows

Ponte en situación: Hay una aplicación en el curro que guarda datos sólo en discos locales. Lo utilizan a diario y no tu sistema de backups sólo backea servidores.

¿Que podemos hacer?
Pondremos una tarea programada que guarde los datos a red a una hora determinada.
¿Y si el usuario apaga el PC?

Manipula el apagado Windows para que haga el backup o lo que quieras en el apagado.

Esto sirve tanto para apagar como para arrancar.

Lo vamos a hacer entrando en la DIRECTIVA DE EQUIPO LOCAL.

Vamos a botón de INICIO, EJECUTAR, y ejecutamos: gpedit.msc

Luego entramos en CONFIGURACIÓN DE EQUIPO, CONFIGURACIÓN DE WINDOWS:


Y ahí podemos indicar el fichero de comandos que queremos ejecutar tanto al cerrar como al arrancar windows.

Por defecto esos scripts se dejan en esta carpeta:



Documentación oficial: http://technet.microsoft.com/es-es/library/cc783802%28WS.10%29.aspx

Portal especializado en Scripts Windows de todo tipo: http://labmice.techtarget.com/scripting/default.htm

Saludos.

martes, diciembre 23, 2008

Scripts windows

Los scripts en general suelen ser lenguajes interpretados.
Algunos son sencillos y limitados, aunque también muy efectivos como el los viejos .bat del ms-dos que sobreviven en los últimos Windows.

Tenemos potentes lenguajes como Perl, Python que se utilizan también como lenguajes de propósito general.

En windows hay un interprete poco conocido que nos puede facilitar mucho la administración de una gran de red de PC-s Windows. Quiero centrarme un poco en este potente lenguaje Windows para intentar sacarle provecho en el trabajo después de las vacaciones.

En Windows utilizaremos el notepad o el viejo Edit para editar un fichero de texto.
Por ejemplo:

WScript.Echo "Hola mundo"

Guardamos el fichero con nombre hola.vbs, abrimos una sesión de línea de comandos y...

cscript hola.vbs

La ventaja de utilizar Windows Script Host es que si nuestra red es Windows todos nuestros clientes lo tienen por defecto. Además tiene "objetos" preparados para Windows: acceso al registro, a la configuración del explorer, al controlador del dominio, etc. etc.

Ahora no puedo probar los scripts sobre los clientes de una red, pero pondremos este script que podemos utilizar para guardar la información del sistema de un PC:

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colCSes = objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem")
For Each objCS In colCSes
WScript.Echo "Computer Name: " & objCS.Name
WScript.Echo "System Type: " & objCS.SystemType
WScript.Echo "Number Of Processors: " & objCS.NumberOfProcessors
Next
Set colProcessors = objWMIService.ExecQuery("Select * from Win32_Processor")
For Each objProcessor in colProcessors
WScript.Echo "Manufacturer: " & objProcessor.Manufacturer
WScript.Echo "Name: " & objProcessor.Name
WScript.Echo "Description: " & objProcessor.Description
WScript.Echo "Processor ID: " & objProcessor.ProcessorID
WScript.Echo "Address Width: " & objProcessor.AddressWidth
WScript.Echo "Data Width: " & objProcessor.DataWidth
WScript.Echo "Family: " & objProcessor.Family
WScript.Echo "Maximum Clock Speed: " & objProcessor.MaxClockSpeed
Next
El resultado:


Por supuesto la salida del script se puede redireccionar a un fichero de texto sin problemas.
Fuente: http://www.microsoft.com/technet/scriptcenter/default.mspx

Saludos.