Trucos y Comandos para Linux (Red)

•Jueves, 10 Septiembre 2009 • Dejar un comentario

Introducción

El siguiente artículo será una recopilación de trucos y comandos con la finalidad de consultar la ayuda de los comandos

Índice

Listado y Filtrados de puertos LISTENING

NETSTAT

  • Listado y Filtrados de puertos LISTENING

Para el listado de Puertos: netstat –l

Para el Filtrado de puertos LISTENING: netstat –l | grep <nº puerto>

 

Enlaces de Interés

Script para obtener el tamaño de las tablas en MS SQL

•Miércoles, 29 Julio 2009 • Dejar un comentario
Escenario

Deseamos conocer el tamaño de las tablas en una base de datos MS SQL

Procedimiento
  • Hacemos login en MS SQL con los permisos suficientes para crear tablas en dbo.tempdb
  • Ejecutamos el siguiente script:

BEGIN SCRIPT
==========================================
declare @id int
declare @type character(2)
declare @pages int
declare @dbname sysname
declare @dbsize dec(15,0)
declare @bytesperpage dec(15,0)
declare @pagesperMB dec(15,0)
create table #spt_space
(
objid int null,
rows int null,
reserved dec(15) null,
data dec(15) null,
indexp dec(15) null,
unused dec(15) null
)
set nocount on
– Create a cursor to loop through the user tables
declare c_tables cursor for
select id
from sysobjects
where xtype = ‘U’
open c_tables
fetch next from c_tables
into @id
while @@fetch_status = 0
begin
/* Code from sp_spaceused */
insert into #spt_space (objid, reserved)
select objid = @id, sum(reserved)
from sysindexes
where indid in (0, 1, 255)
and id = @id
select @pages = sum(dpages)
from sysindexes
where indid < 2
and id = @id
select @pages = @pages + isnull(sum(used), 0)
from sysindexes
where indid = 255
and id = @id
update #spt_space
set data = @pages
where objid = @id
/* index: sum(used) where indid in (0, 1, 255) – data */
update #spt_space
set indexp = (select sum(used)
from sysindexes
where indid in (0, 1, 255)
and id = @id)
- data
where objid = @id
/* unused: sum(reserved) – sum(used) where indid in (0, 1, 255) */
update #spt_space
set unused = reserved
- (select sum(used)
from sysindexes
where indid in (0, 1, 255)
and id = @id)
where objid = @id
update #spt_space
set rows = i.rows
from sysindexes i
where i.indid < 2
and i.id = @id
and objid = @id
fetch next from c_tables
into @id
end
select TableName = (select left(name,60) from sysobjects where id = objid),
Rows = convert(char(11), rows),
ReservedKB = ltrim(str(reserved * d.low / 1024.,15,0) + ‘ ‘ + ‘KB’),
DataKB = ltrim(str(data * d.low / 1024.,15,0) + ‘ ‘ + ‘KB’),
IndexSizeKB = ltrim(str(indexp * d.low / 1024.,15,0) + ‘ ‘ + ‘KB’),
UnusedKB = ltrim(str(unused * d.low / 1024.,15,0) + ‘ ‘ + ‘KB’)
from #spt_space, master.dbo.spt_values d
where d.number = 1
and d.type = ‘E’
order by reserved desc
drop table #spt_space
close c_tables
deallocate c_tables

 

Enlaces de Interés

Para más información visitar el siguiente foro

Script para copiar Ficheros y/o Carpetas en los perfiles de un Equipo

•Sábado, 8 Noviembre 2008 • Dejar un comentario

Escenario

Tenemos un equipo con varios perfiles de usuarios y queremos copiar ficheros y/o carpetas en cada uno de los perfiles que han iniciado sesión en el equipo.

Procedimientos:

  • Tomaremos la lista Perfiles de la Clave del Registro HK_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList y la volcaremos en un Array mediante una función

‘ Procedimiento para listar los perfiles en en un equipo
‘ Recibe la matriz de Perfiles, comprueba la constate lista y muestra la lista de perfiles
Sub ListProfiles(ArrPerfiles)
Dim i
Dim StrM
For i= 0 To UBound(ArrPerfiles,1)
If Not ArrPerfiles(i) = “” Then
StrM =  i & “–” & ArrPerfiles(i)
Mensaje StrM
End If
Next

End Sub

Function FilterProfiles(ArrPerfiles)
Dim i,j,u
Dim strList
Dim arrFilterProfile()

‘Comprobamos si el ultimo elmento de la lista es menor que el numero de perfiles
If SinceElement > UBound(ArrPerfiles,1) Or SinceElement < 0 Then
ReDim Preserve arrFilterProfile(0)
Mensaje(“Error!!!: Criterios de Filtrado erroneo”)
FilterProfiles = arrFilterProfile
Exit Function
End If
j=0
For i = SinceElement To UBound(ArrPerfiles,1)
If FindElementsInStr(ArrPerfiles(i)) = 0 And Not ArrPerfiles(i)= “” Then
ReDim Preserve arrFilterProfile(i-SinceElement)
arrFilterProfile(i-SinceElement-j) = ArrPerfiles(i)
Else
j = j + 1
End If
Next
‘Eliminamos los elmentos vacios del final de la matriz
For i=0 To UBound(arrFilterProfile,1)
If IsEmpty(arrFilterProfile(i)) Then
u = u + 1
End If
Next
ReDim Preserve arrFilterProfile(UBound(arrFilterProfile,1)-u)
FilterProfiles = arrFilterProfile
End Function

  • Generaremos tantas funciones o procedimientos para cubrir las siguientes funciones:
    • Filtrar Perfiles a partir de uno y/o conteniendo una cadena
    • Procedimientos de copia de ficheros y/o carpetas a partir de un Array de Perfiles
  • Definimos un juego de Constantes a modo de parámetros:

    ‘*************************** Parametros del programa *******************************

    ‘Parametros de Filtrado
    Const SinceElement = 3 ‘Listado de perfiles desde el elemento indicado
    Const ExcludeText = “admin” ‘

    ‘Parametros de Copia de Carpetas
    Const BoolCopyFolder = False
    Const CarpetaOrigen = “C:\Test Prueba”

    ‘Parametros de Ficheros
    Const BoolCopyFiles = True
    Const FicherosOrigen = “C:\Test\*.*”

    ‘Parametros de Log
    Const BoolLog = True
    strPath = “”
    strLogFile = strPath & WScript.ScriptName & “.log”
    Set WshNetwork = WScript.CreateObject(“WScript.Network”)
    strBeginnerLog = CStr(Now) & ” ” & WshNetwork.ComputerName & “: “

  • El script se encuentra ubicado  CopiarHaciaPerfiles.zip

Enlaces de Interés

Para más información consultar User Profile Structure

Disclaimer

Este ejemplo de script no esta soportado por el autor del artículo. Este ejemplo de script es ta provisto sin garantía de ningún tipo.

Fecha de Instalación de Windows

•Martes, 7 Octubre 2008 • Dejar un comentario

Escenario

¿Cuantas veces hemos querido saber cuando instalamos el Windows con el que trabajamos, con el fin de poder decidir si reparar la instalación o realizar una actualización o un reinstalación?

 

Procedimientos:

El procedimiento se basa en el comando de consola systeminfo y find de Windows XP o superior.

  • Abrimos una consola de comandos de Windows
  • Ejecutamos el comando con las siguientes opciones y obtendremos:

C:\>systeminfo | find /i "fecha"

Fecha de instalación original:             11/10/2007, 13:10:56

 

NOTA: La cadena de búsqueda varía en función del idioma de Windows, por ejemplo, para averiguar la fecha de instalación de un Windows en ingles sería systeminfo | find /i "install date"

 

Enlaces de Interés

Para más información consultar  Windows Installation Date | Pedro Santos

 

Disclaimer

Este ejemplo de artículo no esta soportado por el autor. Este ejemplo de artículo está provisto sin garantía de ningún tipo.

Windows Memory Diagnostic

•Miércoles, 6 Agosto 2008 • Dejar un comentario

Contenido

Existen situaciones donde los equipos con sistemas operativos se bloquean y muestran pantallas azules, ¿cual puedes ser las causas?. ¿Es la última aplicación instalada en el ordenador?, o ¿es un problema de memoria?. Una forma de despejar esta última pregunta es mediante la herramienta de Microsoft Windows Memory Diagnostic (de ahora en adelante WMD).

Comenzar con Windows Memory Diagnostic

Para usar WMD, descarga y ejecuta el programa -mtinst.exe- desde la dirección Web http://oca.microsoft.com/en/windiag.asp . Observa que el programa no se instala y nos muestra la siguiente ventana.

image
image
  • Create Startup Disk, desde esta opción podremos crear un disco de inicio y ejecutar el programa para realizar el diagnóstico
  • Save CD Image to Disk, desde esta opción podremos saber un fichero ISO para crear un CD de arranque y ejecutar el programa de diagnóstico

Diagnosticando la Memoria

Cuando el programa arranca automáticamente comienza realizar el diagnóstico de la memoria en modo estándar, el cual incluye 6 tipos diferentes de memoria (MATS+, INVC, etc.)

En el siguiente vídeo muestra el funcionamiento de MWD

En Resumen

En situaciones donde nuestro equipo se nos queda bloqueado o nos muestra pantalla azul. Mediante la herramienta gratuita Windows Memory Diagnostic podemos realizar comprobaciones sobre la memoria y poder determinar si la causa de que nuestro equipo se quede bloqueado o nos muestrea pantalla azules se producida por problemas en algún banco de memoria.

Disclaimer

El siguiente artículo está basado en el artículo Utility Spotlight Windows Memory Diagnostic publicado en TechNet Magazine de Septiembre del 2008

Script para configurar obtención de servidores DNS mediante DHCP en un equipo con DNS estática

•Martes, 17 Junio 2008 • 3 comentarios

Escenario

Tenemos varios equipos con Windows XP SP2 donde se ha configurado las conexiones de área local con servidores DNS de forma estática y queremos cambiar la configuración de la conexión de área local para que obtenga las direcciones de los servidores DNS mediante DHCP

 

Procedimientos:

  • Crearemos un fichero DNS.vbs y le insertaremos el siguiente código:

On Error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colNetCards = objWMIService.ExecQuery _
("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")
For Each objNetCard in colNetCards

    ‘ Creamos la varibale para configurar los DNS
    ‘No asignamos valor a la variable ya que pordefecto el valor es Null
    ‘"Inyectamos" valor Null en el método SetDNSServerSearchOrder

    Dim arrDNSServers
    objNetCard.SetDNSServerSearchOrder(arrDNSServers)
Next
WScript.Echo "Fin de la Ejecución…"

 

  • Ejecutamos el Script y comprobamos que los DNS se obtienen mediante DHCP
  • Video ejempl del funcionamiento del Script

 

Enlaces de Interés

Para más información consultar script Modify the DNS Server Search Order for a Network Adapter

 

Disclaimer

Este ejemplo de script no esta soportado por el autor del artículo. Este ejemplo de script es ta provisto sin garantía de ningún tipo.

Instalar Virtual Server 2005 R2 en Windows Vista

•Miércoles, 4 Junio 2008 • Dejar un comentario

Escenario

Instalar Virtual Server 2005 en equipos de no producción con Windows Vista

 

Procedimiento

  • Agregaremos el IIS a Windows Vista siguiendo los siguientes pasos
    1. Iremos a Panel de control\Programas\Programas y características
    2. Hacemos clic en Activar o Desactivar características de Windows
    3. Seleccionaremos los siguientes componentes: 

  • Herramientas de Administración Web
    • Compatibilidad con la Administración de IIS 6
      • Compatibilidad con la configuracion de IIS 6 y Metabase de IIS
    • Consola de administración de IIS
  • Servicios World Wide Web
    • Características de Desarrollo de Apliciaciones
      • ASP
      • CGI
      • ASP.NET
      • Extensibilidad de .NET
      • Extensiones ISAPI
      • Filtros ISAPI
    • Característcas HTTP Comunes (Todas menos "Redirección HTTP")
    • Estado y Diagnóstico
      • Registro HTTP
      • Seguimiento
    • Características de Rendimiento
      • Compresión de contenido estático
    • Seguridad
      • Autenticación de Windows
  • Instalar Virtual Server 2005 R2 SP1

Enlaces de Interés

Para más información visitar Como instalar Virtual Server 2005 R2 en Windows Vista

Cómo quitar del grupo administrativo el primer equipo con Exchange 2003 Server en Cluster

•Martes, 27 Mayo 2008 • Dejar un comentario

Escenario

Tras la creación de un nuevo cluster de Exchange y movido los buzones el Cluster Exchange 2003 se procede a dar de baja, por razones estratégicas en la infraestructura.

Procedimiento

  1. Aplicar el procedimiento Cómo quitar del grupo administrativo el primer equipo con Exchange 2003 Server.
  2. Realizar NAT del servidor SMTP del cluster, si procede en el escenario y/o garantizar la continuidad del servicio SMTP asociado al antiguo cluster de Exchange.
  3. Aplicar el procedimiento: How to Remove an Exchange Virtual Server from an Exchange Cluster
  4. Desinstalación de MS Exchange 2003, si procede.
  5. Eliminación del Grupo Cluster Exchange, si procede.

Resolución de Problemas

En el caso de aparecer problemas en algunos de los pasos del procedimiento aplicar realizar las acciones siguientes:

Crear Carpeta Pública y Habilitar respuesta Automática

•Martes, 27 Mayo 2008 • Dejar un comentario

Escenario

Crear una Carpeta Púublica para recepcionar correos desde Internet.

Procedimiento

  1. Se crea una Carpeta Pública mediante MS Outlook en la rama de Carpetas Públicas con permiso Propietario
  2. Habilitar Correo mediante el Administrador del sistema Exchange con permiso de Administrador
  3. Permitir Auto-Rélica en Formatos de los mensajes de Internet. Mediante botón derecho en Predeterminado pestaña Avanzado

Enlaces de Interés

Para gestionar eficientemente el servidor SMTP es aconsejable aplicar el artículo Fortify Your Email Transport – Part 2

Función para el Cálculo de Días Laborables en Transact-SQL

•Martes, 27 Mayo 2008 • 1 comentario

Escenario

Para análisis estadísticos es necesario implementar en T-SQL de MS SQL 2000 una función para el cálculo de días laborables entre dos fechas.

Se consideran días Laborables de Lunes a Viernes (de ahora en adelante DIA.LAB) y Fin de Semana Sábado y Domingo (de ahora en adelante FinDe)

Procedimiento

Definimos una función en T-SQL para contabilizar los días laborables atendiendo a los siguientes casos:

  1. Acceder al servidor MS SQL 2000 con permisos necesarios al menos para ejecutar CREATE FUNCTION
  2. Comprobamos que el primer día de la semana es lunes, para ello ejecutamos select @@DATEFIRST el valor debe ser 1
  3. Definimos una función atendiendo a los siguientes casos:
    • Fecha Inicio y Fecha Fin en FinDe
    • Fecha Inicio DIA.LAB y Fecha Fin FinDe
    • Fecha Inicio FinDe y Fecha Fin en FinDe
    • Fecha Inicio y Fecha Fin en DIA.LAB

Utilizamos el siguiente código

CREATE function fBusinessDays (@start datetime, @end datetime)
returns int
as
begin
/*
Descripción:
    Función diseñada para calcular los días LABORABLES entre 2 fechas
*/

DECLARE @wks as int, @LabDays as int — Cálculo de Semanas

/*

Primero calculamos las semanas entre 2 fechas atendiendo a los siguientes casos:

  • F.Inicio en FinDe y F.Fin DIA.LAB -> Convertimos F.Inicio en DIA.LAB sumando 2 días y calculando el número de semanas
  • F.Inicio en DIA.LAB y F.Fin en FinDe -> Convertimos F.Fin en DIA.LAB restando 2 días y calculamos el número de semanas
  • F.Inicio y Fin en Find -> Convertimos F.Inicio y F.Fin en DIA.LAB restando 2 días y calculamos el número de semanas
  • Cualquier otro caso calculamos el número de semanas entre las fechas

*/

    SET @wks = CASE
            WHEN datepart( dw, @start) in (6,7) AND datepart( dw, @end)<6 THEN datediff( week, @start+2, @end)
            WHEN datepart( dw, @start) < 6 AND datepart( dw, @end) in (6,7) THEN datediff( week, @start, @end-2)
            WHEN datepart( dw, @start) in (6,7) AND datepart( dw, @end) in (6,7) THEN datediff( week, @start-2, @end-2)
            ELSE
                datediff( week, @start, @end)
        END

/*

Primero calculamos el número de días DIA.LAB en función de los siguientes casos:

  • F.Inicio en FinDe y F.Fin DIA.LAB -> Total de semanas calculada * 5 + la distancia entre el lunes y F.Fin
  • F.Inicio en DIA.LAB y F.Fin en FinDe -> Total de semanas calculada * 5 + la distancia entre el sábado y F.Inicio
  • F.Inicio y Fin en Find -> Total semanas calculadas * 5 días
  • Cualquier otro caso calculamos el número de semanas entre las fechas

*/

 

    SET @LabDays =
        CASE
            WHEN datepart( dw, @start) in (6,7) AND datepart( dw, @end) in (6,7) THEN @wks*5
            WHEN datepart( dw, @start) in(6,7) AND datepart( dw, @end) < 6  THEN @wks*5 + datepart( dw, @end)
            WHEN datepart( dw, @start) < 6 AND datepart( dw, @end) in (6,7) THEN @wks*5 + (6 – datepart( dw, @start))
            ELSE
                datediff( dd, @start, @end) – @wks*2 + 1
        END

    return( @LabDays)
end

Enlaces de Interés

Para consultar el manejo del lenguaje consultar Transact-SQL Reference