Una de las situaciones más comunes en el ámbito de los sistemas operativos donde es necesaria una intervención rápida es la falta de espacio en disco. En estos casos, los administradores de sistemas tenemos que averiguar cómo está distribuido el espacio en disco y determinar qué archivos se pueden eliminar o mover.
La forma más rápida de diagnosticar estas situaciones es averiguar el tamaño de los directorios que cuelgan de un directorio dado. De esta forma podemos comprobar si los tamaños de estos directorios son razonables o no.
Para facilitar la tarea y conseguir esta información lo antes posible, he creado la herramienta diresp.exe. La versión actualmente disponible es la 3 y puedes descargarla en éste enlace.
Para mayor comodidad, conviene copiar esta herramienta en un directorio con Path, como C:\Windows\System32, después abrir la línea de comandos cmd, ubicarse en el directorio padre donde queremos comprobar los tamaños de sus directorios y ejecutar diresp3.exe.
Es posible que tarde un poco en listar los resultados dependiendo del número de subdirectorios y archivos, pero éstos aparecen ordenados por tamaño indicando el nombre del directorio hijo correspondiente. Una vez ubicado el directorio con tamaño sospechoso, podemos acceder a él y ejecutar de nuevo la herramienta (esta vez te aseguro que irá más rápido) hasta confirmar el directorio problemático.
Mostrando entradas con la etiqueta utilidades. Mostrar todas las entradas
Mostrando entradas con la etiqueta utilidades. Mostrar todas las entradas
lunes, 20 de octubre de 2014
martes, 11 de diciembre de 2012
Información de un sistema Windows con WMI y C
Ya sabemos que WMI es la forma más sencilla de extraer información útil de un sistema Windows, ya sea para realizar diagnósticos, para registrar equipos o para realizar informes.
Buscando la forma más sencilla para conseguir esta información en cualquier máquina Windows, existe un comando de consola que extrae el dato directamente: wmic
Por ejemplo, si queremos ver el número de serie de la máquina local, podemos hacerlo así:
wmic csproduct get identifyingnumber
de igual forma, si queremos ver el nombre del microprocesador, utilizamos:
wmic cpu get name
Si con antelación sabemos la información que nos interesa de un sistema, podemos incluir todas
las sentencias que queramos en un archivo por lotes (.bat) y utilizarlo, pero si además nos interesa disponer de un archivo ejecutable que realice lo mismo, podemos hacerlo con un pequeño programa en C, llamado por ejemplo regsys.c de la siguiente forma:
Podemos modificar el programa anterior e incluir todas las sentencias WMI que necesitemos mostrar. Además, con los conocimientos necesarios podemos ampliarlo para darle más funcionalidad como aceptar argumentos y escribir informes en un archivo HTML, por ejemplo.
El programa anterior se puede escribir en cualquier Windows, y compilarlo y enlazarlo con MinGW de la siguiente forma:
cc regsys.c -o regsys.exe
y ya tendremos la herramienta regsys.exe lista para ejecutarlo.
Buscando la forma más sencilla para conseguir esta información en cualquier máquina Windows, existe un comando de consola que extrae el dato directamente: wmic
Por ejemplo, si queremos ver el número de serie de la máquina local, podemos hacerlo así:
wmic csproduct get identifyingnumber
de igual forma, si queremos ver el nombre del microprocesador, utilizamos:
wmic cpu get name
Si con antelación sabemos la información que nos interesa de un sistema, podemos incluir todas
las sentencias que queramos en un archivo por lotes (.bat) y utilizarlo, pero si además nos interesa disponer de un archivo ejecutable que realice lo mismo, podemos hacerlo con un pequeño programa en C, llamado por ejemplo regsys.c de la siguiente forma:
#include <stdio.h>
#include <stdlib.h>
char *wmi();
int main()
{
// número de serie
char *nserie = "wmic csproduct get IdentifyingNumber";
char *pNserie = wmi( nserie );
printf("Numero de serie: %s", pNserie);
// fabricante
char *fabricante = "wmic computersystem get Manufacturer";
char *pFabricante = wmi( fabricante );
printf("Fabricante: %s", pFabricante);
// modelo placa
char *modeloPlaca = "wmic computersystem get model";
char *pModeloPlaca = wmi( modeloPlaca );
printf("Modelo placa: %s", pModeloPlaca);
// arquitectura
char *arq = "wmic computersystem get SystemType";
char *pArq = wmi( arq );
printf("Arquitectura: %s", pArq);
// procesador
char *cpu = "wmic cpu get name";
char *pCpu = wmi( cpu );
printf("Procesador: %s", pCpu);
return 0;
}
char *wmi( char *in )
{
FILE *fp;
char line[130];
char *line2;
line2 = malloc(130 * sizeof(char *));
fp = popen( in, "r" );
int x = 0;
while ( fgets( line, sizeof line, fp))
{
if ( x == 1 )
{
int z;
for ( z = 0 ; z < sizeof line ; z++ )
{
line2[z] = line[z];
}
}
x++;
}
pclose(fp);
return line2;
}
#include <stdlib.h>
char *wmi();
int main()
{
// número de serie
char *nserie = "wmic csproduct get IdentifyingNumber";
char *pNserie = wmi( nserie );
printf("Numero de serie: %s", pNserie);
// fabricante
char *fabricante = "wmic computersystem get Manufacturer";
char *pFabricante = wmi( fabricante );
printf("Fabricante: %s", pFabricante);
// modelo placa
char *modeloPlaca = "wmic computersystem get model";
char *pModeloPlaca = wmi( modeloPlaca );
printf("Modelo placa: %s", pModeloPlaca);
// arquitectura
char *arq = "wmic computersystem get SystemType";
char *pArq = wmi( arq );
printf("Arquitectura: %s", pArq);
// procesador
char *cpu = "wmic cpu get name";
char *pCpu = wmi( cpu );
printf("Procesador: %s", pCpu);
return 0;
}
char *wmi( char *in )
{
FILE *fp;
char line[130];
char *line2;
line2 = malloc(130 * sizeof(char *));
fp = popen( in, "r" );
int x = 0;
while ( fgets( line, sizeof line, fp))
{
if ( x == 1 )
{
int z;
for ( z = 0 ; z < sizeof line ; z++ )
{
line2[z] = line[z];
}
}
x++;
}
pclose(fp);
return line2;
}
Podemos modificar el programa anterior e incluir todas las sentencias WMI que necesitemos mostrar. Además, con los conocimientos necesarios podemos ampliarlo para darle más funcionalidad como aceptar argumentos y escribir informes en un archivo HTML, por ejemplo.
El programa anterior se puede escribir en cualquier Windows, y compilarlo y enlazarlo con MinGW de la siguiente forma:
cc regsys.c -o regsys.exe
y ya tendremos la herramienta regsys.exe lista para ejecutarlo.
miércoles, 28 de marzo de 2012
Reenvío de mensajes en Exchange 2010
Realizar esta tarea con la consola de Administración de Exchange o con Powershell implica varios pasos. Con objetivo de reducir estos pasos, he desarrollado una herramienta llamada:

que además tiene un aspecto similar a esta opción de la consola de Administración de Exchange:

El manejo es sencillo:
Primero introduce el nombre de la Cuenta del buzón (samaccountname) en la que gestionarás el reenvío y pulsa ENTER (si hay algún problema aquí, como por ej. no existe la cuenta, etc., se borrará lo introducido y empezarás de nuevo).
Si la Cuenta del buzón introducida no tiene el reenvío activado, el checkbox Reenvío quedará disponible y clicando en él activarás el reenvío. En este caso, en el campo Reenviar a: escribe la cuenta (samaccountname) de la cuenta que recibirá los emails en lugar de la cuenta del buzón, y opcionalmente clica en Entregar en el buzón y en la dirección de reenvío si quieres que los mensajes los reciban ambos buzones. Finalmente clica en Aceptar para aplicar los cambios.
Si la Cuenta del buzón introducida tiene el reenvío activado verás que Reenvío está marcado, en Reenviar a: aparece la cuenta donde llegan actualmente los mensajes, y si corresponde, la entrega en ambos buzones. En este caso puedes desactivar el reenvío clicando en Reenvío o también puedes cambiar la cuenta de reenvío en Reenviar a: o puedes activar o desactivar la entrega en ambos buzones. Finalmente clica en Aceptar para aplicar los cambios.
Notas adicionales:
- Después de introducir el nombre de una cuenta de un buzón y pulsar ENTER, es posible que tarde unos segundos en mostrar si tiene el reenvío o no activado.
- Después de clicar en Aceptar es posible que tarde unos segundos en aplicar los cambios. Para comprobarlo, con el buzón correspondiente en el campo Cuenta del buzón: pulsa ENTER hasta ver los cambios aplicados.
- El campo Reenviar a: también admite los nombres de las cuentas (samaccountname) de grupos de distribución.
Suscribirse a:
Entradas (Atom)