Archivos de Categoría: Windows

LogRotate en Windows (Rotación de logs)

Windows no tiene, a diferencia de Linux, un software potente para rotación de logs. EN el caso de Linux tenemos el famoso logrotate que te permite infinidad de opciones.

Debido a una exigencia profesional he tenido que realizar una rotación automática de unos logs en Windows. Dejo aquí el código de un fichero bat (si, bat….) que realiza la rotación, compresión y eliminación de old logs.

Mas que simple..

@echo off
REM Enric Solsona – LogRotate
REM Versió 1.0
REM ___________________________________________________________________________________________________________________________________

REM Declaramos variables etc..
set date=%trdt%%trtt%

REM Vemos la fecha del sistema
set da=%date%

REM Por defecto la fecha viene declarada con /, lo que hacemos ahora es modificar la / por _ Asi no tendremos problemas con directorios
set variable=%da:/=_%

REM Vamos al directorio donde queremos rotar el log
cd “C:\program Files\Soft\Comp\log\”

REM Movemos el log actual hacia otro fichero con la fecha actual. Por defecto el programa que uso no bloquea el fichero, por eso se puede hacer en caliente
move “C:\program Files\Soft\Comp\log\softlog.log” “C:\program Files\Soft\Comp\log\%variable%softlog.log”

REM Comprimimos el fichero
zip -r -9 -S %variable%softlog.zip %variable%softlog.log

REM Eliminamos los ficheros mas viejos de 30 dias.
forfiles /p “C:\program Files\Soft\Comp\log\” /m *softlog.zip -d -30 /c “cmd /c del /q @path”

Truncar archivos LDF de SQL Server

Desde hace un tiempo, tengo varias Bases de Datos en que el fichero LDF se va llenando sin parar.
Aquí dejo una sentencia para vaciar dicho fichero y dejar de tener problemas con los espacios

use @Base_de_Datos;

BACKUP LOG @Base_de_Datos WITH NO_LOG

DBCC SHRINKFILE (@Base_de_Datos_Log, 10) WITH NO_INFOMSGS

Aquí tenemos el ejemplo:

Después podemos ver la diferencia de espacio del log:

VbScript para duplex en impresora y predeterminarla

Hace tiempo que el mundo lucha por un espacio mas verde.

“Todos” reciclamos, contaminamos menos etc…

Flor

La empresa por la que trabajo en la actualizad, no es menos. Por esto, entre otros motivos, me he visto envuelto en una tarea de configurar de forma automática todos los ordenadores (hay un spool).

La solución era;

Configurar el duplex en la impresora del spool.

Eliminar la impresora del usuario

Conectar de nuevo la impresora del usuario (se establecen las configuración que hay en el spool)

Establecer la impresora predeterminada.

Para realizarlo nada mejor que un VbScript por Active Directory.

No hace nada mas que sacar un listado de las impresoras de red, las guarda en un fichero (con el nombre de red Ej: \\spool\printer1) Guardar en otro fichero la impresora predeterminada (de la misma manera, con un fichero) y  luego conectarlas todas de nuevo.

Aquí tenemos el script:

Const ForAppending = 8
Const ForReading = 1

‘ Get the local computer name.
strComputer = “.”
Dim aqui

‘ MsgBox “Printers have been mapped.” & vbCRLF & varDelText & vbCRLF & vbCRLF & “Impresoras Mapeadas”, 64, “Script Complete”
‘strComputer = “.”
‘Set objWMIService = GetObject(“winmgmts:” _
‘ & “{impersonationLevel=impersonate}!\\” _
‘ & strComputer & “\root\cimv2″)
‘Set colInstalledPrinters = objWMIService.ExecQuery _
‘ (“Select * from Win32_PrinterConfiguration “)
‘For Each objPrinter In colInstalledPrinters
‘ objPrinter.Duplex = False

‘Wscript.Echo “Duplex: ” & objPrinter.Duplex & objPrinter.Name
‘Next

Set oShell = CreateObject(“Wscript.Shell”)
strUserProfile = oShell.ExpandEnvironmentStrings(“%USERPROFILE%”)
Set filesys = CreateObject(“Scripting.FileSystemObject”)
dim filesys, filetxt, getname, path, demofile, demofile3, filesys3

path = filesys.GetAbsolutePathName(strUserProfile & “\text.txt”)
getname = filesys.GetFileName(path)

If filesys.FileExists(path) Then
Set filesys= CreateObject(“Scripting.FileSystemObject”)
set demofile = filesys.GetFile(strUserProfile & “\text.txt”)
demofile.Delete
End If

path3 = filesys.GetAbsolutePathName(strUserProfile & “\text2.txt”)
getname = filesys.GetFileName(path3)
If filesys.FileExists(path3) Then

Set filesys3= CreateObject(“Scripting.FileSystemObject”)
set demofile3 = filesys3.GetFile(strUserProfile & “\text2.txt”)
demofile3.Delete
End If

Set WshNetwork = CreateObject(“WScript.Network”)
Set objWMIService = GetObject(“winmgmts:{impersonationLevel=impersonate}!\\” & strComputer & “\root\cimv2″)
Set colInstalledPrinters = objWMIService.ExecQuery(“Select * from Win32_Printer”)
Set colItems = objWMIService.ExecQuery(“Select * from Win32_ComputerSystem”,,48)
Set WshShell = WScript.CreateObject(“WScript.Shell”)
Set objFSO = CreateObject(“Scripting.FileSystemObject”)
filOutput = strUserProfile & “\text.txt”
filOutput2 = strUserProfile & “\text2.txt”

‘ Creates a text file with the listing of all network printers for the logged in user.
Set objOutputFile = objFSO.OpenTextFile (filOutput, ForAppending, True)
Set objOutputFile2 = objFSO.OpenTextFile (filOutput2, ForAppending, True)
For Each objPrinter in colInstalledPrinters
strTest = Left(objPrinter.Name, 2)
If strTest = “\\” Then
If objPrinter.Name = “\\Gestetner09\P9CORMFP” then
‘MsgBox “AQUESTA NO” & objPrinter.Name
elseif objPrinter.Name = “\\Gestetner09\P9CORMFPFACT” then
‘MsgBox “AQUESTA NO” & objPrinter.Name
else
‘MsgBox objPrinter.Name
objOutputFile.WriteLine(objPrinter.Name)
WshNetwork.RemovePrinterConnection objPrinter.Name
End If

If objPrinter.Default = True Then

aqui = objPrinter.Name
objOutputFile2.WriteLine(objPrinter.Name)
‘MsgBox aqui
‘MsgBox objPrinter.Name & “DEFAULT”

End If

End If
Next
objOutputFile.Close
‘MsgBox “Backup Echo ‘” & filOutput & “‘.”, 64, “Script Complete”

‘ Opens the text file matching the logged in user and reconnects to the printers listed.
Set objTextFile = objFSO.OpenTextFile (filOutput, ForReading)

‘Set objTextFile2 = objFSO.OpenTextFile (filOutput2, ForReading)
‘ Do Until objTextFile2.AtEndOfStream
‘ strPrinter = objTextFile2.Readline
‘ strTest = Left(strPrinter2, 2)
‘Loop

Do Until objTextFile.AtEndOfStream
strPrinter = objTextFile.Readline
strTest = Left(strPrinter, 2)

‘ If strTest = “\\” Then
‘MsgBox strPrinter & ” ” & strPrinter2
WshNetwork.AddWindowsPrinterConnection strPrinter
if strPrinter = aqui Then

‘WshNetwork.SetDefaultPrinter strPrinter2
WshNetwork.SetDefaultPrinter aqui
End If
‘ End If

Loop

‘MsgBox “Impresoras Mapeadas”, 64, “Script Complete”

objTextFile.Close

‘ MsgBox “Printers have been mapped.” & vbCRLF & varDelText & vbCRLF & vbCRLF & “Impresoras Mapeadas”, 64, “Script Complete”
‘strComputer = “.”
‘Set objWMIService = GetObject(“winmgmts:” _
‘ & “{impersonationLevel=impersonate}!\\” _
‘ & strComputer & “\root\cimv2″)
‘Set colInstalledPrinters = objWMIService.ExecQuery _
‘ (“Select * from Win32_PrinterConfiguration “)
‘For Each objPrinter In colInstalledPrinters
‘ objPrinter.Duplex = False

‘MsgBox objPrinter.Duplex
‘Next
‘MsgBox “Finalizado. Impresora por defecto ” & aqui
Wscript.Quit

Aquí para descargarlo

VmWare Physical to Virtual (P2V)

Hace tiempo estuve trabajando en una empresa de hosting. En dicha empresa se hacían los backup con Acronis y eso permitía hace un “backup to virtual” con cierta facilidad. Pero este no es el caso, esta situación es un Physical to Virtual (P2V) y sin parar la maquina.

Para ello necesitamos el VMware Converter, en mi caso la versión 4.0.1-161434.

Primero agregamos la maquina seleccionando “Powered-on machine”, en mi caso una Linux Debian Lenny

Agregamos la maquina origen

Seleccionamos el cluster (en este caso es un cluster) de destino. Podría ser solo un ESx o un ESxi

Seleccionamos Cluster destino

Al ser un cluster, tenemos que seleccionar el ESx que queremos de destino, y el datastore. También podemos modificar el nombre.

Asignar ESx

Una vez asignado el Esx quizas nos encontramos que nos tenemos espacio. En mi caso mi Debian tenia varios volúmenes;

Valúmenes

Por suerte podemos reasignar espacios. En mi caso lo pongo al mínimo;

Reasignar espacios

Al final obtenemos un resumen;

Resumen P2V

Y ya lo tenemos listo para empezar;

Iniciamos

Justo al iniciar ya tenemos agregada la maquina al VCenter. Solo nos queda esperar un buen ratito para tener la maquina lista!

Virtual Center

Network Load Balancing en Windows Server 2003 (NLB)

Este es un pequeño manual para crear un Load Balancing (frontal y 2 backends sirviendo con un IIS) con un Windows 2003 Data Center Edition.

Primero vamos a definir la infraestructura.

Front-Win001 (192.168.1.41)
Back-Server01 (192.168.1.39)
Back-Server02 (192.168.1.42)
Balanced-Server01 (192.168.1.40)

La maquina Balanced-Server01 en realidad es el servicio Load Balancing que dependiendo del estado de los backend (o de la configuración del Load Balancing) servirá la web desde un servidor o desde otro.

Los los Backends tienen un IIS en este caso sin ninguna configuración en especial (pero lo ideal seria tener un sistema de archivos centralizado para estar sirviendo la misma web, pero para hacer las pruebas y ver que funciona, vamos a mostrar webs distintas dependiendo del backend que esta funcionando)

La maquina Front es la maquina “fisica” que tiene corriendo el servicio de Load Balancing.

Primer tenemos que tener instalado el servicio IIS en los backends.

Instalar IIS

Instalar IIS

Cuando ya tenemos los backend funcionando con el IIS vamos a ir al servicio de Network Load Balancing del Frontal (en este caso Front-Win001 (192.168.1.41)) para configurar los dos backends.

Le damos a crear un cluster y poner la IP (en este caso Balanced-Server01 (192.168.1.40)) que vamos a publicar de la web.

Configuración IP Balanceado

Configuración IP Balanceado

Es importante describir ciertos campos de este apartado:

Microsoft Network Load Balancing nos ofrece dos alternativas para el modo de operación del Cluster NLB (Cluster operation mode):

  • Unicast. Esta es la opción por defecto y es la opción recomendada. La dirección MAC del Cluster, es asignada a todas las tarjetas de red asignadas al Cluster NLB, y la dirección MAC de cada tarjeta de red NO es utilizada. Es decir, cada tarjeta de red asignada al Cluster NLB mantiene una única dirección MAC, en particular, la MAC del Cluster. Así, tanto la dirección IP del Cluster como la dirección IP propia de la tarjeta de Red, se resuelven a la dirección MAC del Cluster, ya que se sobrescribe la dirección MAC real de las tarjetas de red del Cluster NLB con la dirección MAC del Cluster.Esta configuración, implica que NO es posible la comunicación desde un Host del Cluster NLB a otro Host del Cluster NLB a través de la tarjeta de red utilizada en el Cluster, debido a que al compartir la dirección MAC (es decir, utilizar la misma dirección MAC en el equipo de origen y en la tarjeta de red del equipo destino), se produce una confusión, es decir, en el nivel de enlace OSI (Ethernet y direcciones MAC) no es posible diferenciar al destinatario del emisor, y por ello, la comunicación host-to-host (también conocida como intra-host) NO es posible.Es interesante recordar (para aquellos pocos que lo puedan utilizar) que al utilizar Application Center 2000 para configurar NLB, se especificará el modo de operación del Cluster NLB en Unicast, conforme indicar el artículo de soporte KB 278431.
  • Multicast. La dirección MAC del Cluster, es asignada a todas las tarjetas de red asignadas al Cluster NLB, pero de forma adicional, cada tarjeta de red mantiene su dirección MAC. Es decir, cada tarjeta de red asignada al Cluster NLB mantiene dos direcciones MAC, pero sólo la dirección MAC del Cluster es utilizada para la comunicación con los equipos clientes. Así, la dirección IP del Cluster se resuelve a la dirección MAC del Cluster, y la dirección IP propia de la tarjeta de Red se resuelve a la dirección MAC propia de dicha tarjeta.Este comportamiento implica que una tarjeta de Red de un Cluster NLB configurado en modo de operación Multicast, es capaz de manejar tanto el tráfico de los clientes (paquetes destinados a la dirección IP/MAC del Cluster) como el tráfico propio del Host (paquetes destinados a la dirección IP/MAC de la tarjeta de Red del Cluster NLB).En algunos casos la utilización de direcciones MAC multicast, no es soportada por la implementación ARP de algunos enrutadores (routers), como es el caso de Cisco (ni más ni menos ;-) , en cuyo caso, el Cluster NLB no será visible fuera del segmento Ethernet al que pertenece. Para evitar este tipo de problemas, debe garantizarse que el enrutador (Router) acepta respuestas ARP que incluyan una dirección MAC en el payload de la trama Ethernet, pero que parecen proceder de un dispositivo con una dirección MAC distinta, conforme se muestra en la cabecera Ethernet. Si el enrutador (router) o el conmutador multi-capa (multi-layer switch) correspondiente no soporta esta funcionalidad, es posible crear una entrada ARP estática en el router como solución al problema, para que así sea capaz de resolver la dirección IP Unicast a la dirección MAC Multicast correspondiente.Multicast puede ofrecer un rendimiento inferior a Unicast, debido a que utiliza una única tarjeta de red tanto para el tráfico de los equipos clientes como para el tráfico host-to-host (también conocido como tráfico intra-host).Al utilizar Multicast es posible activar la opción IGMP Multicast. La principal razón por la que activar o desactivar la opción IGMP Multicast, es en caso de descubrir algún tipo de problema de funcionamiento, como por ejemplo, problemas de convergencia.

La recomendación de Microsoft es utilizar el modo de operación Unicast, excepto que se disponga de una única tarjeta de red (tanto para el Cluster NLB como para el resto de comunicaciones) y además sea necesaria la comunicación entre los distintos Nodos del Cluster. Como hablamos, es recomendado para evitar problemas con enrutadores (routers).

Es importante tener en cuenta, que la dirección MAC del Cluster NLB, se genera de forma automática, es decir, no podemos especificar de forma explícita que dirección MAC deseamos utilizar para utilizar como MAC del Cluster.

También es interesante recordar que, independientemente del modo de operación del Cluster NLB (es decir, sea Unicast o sea Multicast), las tarjetas de red utilizadas en un Cluster NLB dispondrán al menos de dos direcciones IP: la dirección IP propia de la tarjeta más la dirección IP del Cluster NLB.

Nota: Información de aqui

Una vez tenemos esto seguimos con definiendo los puertos del balanceador. Microsoft por defecto nos habilita todo los puertos.

Puerto

Puerto

Por defecto dejaremos solo el 80.

Por defecto dejamos el 80

Por defecto dejamos el 80

En la siguiente opción, al ser un servicio, podemos indicarle como queremos que se inicie. En este caso, al conseiderarlo critico lo dejaremos como inicio por defecto Iniciado.

Inicio por defecto

Inicio por defecto

Una vez finalizada la configuración ya tenemos el primer nodo del cluster. Mientras configurabamos este nodo, teniamos la posibilidad de agregar mas nodos y configurarlos todos a la vez, pero siempre va bien hacer uno por uno.

Ahora es tan facil como boton derecho, agregar nodo y poner la ip de dicho nodo, en este caso Back-Server02 (192.168.1.42) y ya lo tendremos. Las dos maquinas y el frontal.

Frontal y 2 Backends

Agregar maquina

Frontal y 2 Backends

Frontal y 2 Backends

Pero ahora tocan las prubas. La mas facil es;

Conectarse al balanceador (192.168.1.40) y ver que web muestra:

Primera conexión

Primera conexión

Desactivamos la tarjeta de red del servidor 1 (192.168.1.39) y nos volvemos a conectar al frontal (192.168.1.40) con otro navegador (por temas de cache)

Segunda conexión

Segunda conexión

Y vemos que nos muestra otra web, conectandonos a la misma ip. Ya tenemos nuestro balanceador funcionando. :)