'nivel de subárbol
Const ADS_SCOPE_SUBTREE = 5
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 10000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
objCommand.CommandText = _
"SELECT distinguishedName,AdsPath FROM 'LDAP://dc=depo,dc=es' WHERE objectCategory='user'"
Set objRecordSet = objCommand.Execute
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set Flog = oFSO.CreateTextFile("cuentas.log")
'CANTIDAD = objRecordSet.RecordCount
if not objRecordset.eof then
objRecordset.Movefirst
while not objRecordset.eof
Set objuser = GetObject(objRecordSet.Fields("AdsPath").Value)
if objUser.IsAccountLocked = TRUE Then
Flog.Writeline("desbloqueando " & objRecordSet.Fields("distinguishedName").Value)
objuser.put "lockoutTime", 0
objUser.SetInfo
end if
objRecordSet.MoveNext
wend
end if
Flog.close
miércoles, 23 de mayo de 2012
Script para desbloqueo de cuentas de Active Directory
Desbloquea los usuarios de AD de todo el directorio
lunes, 21 de mayo de 2012
Balancear IIS desde Apache, según sesiones
Gracias al wmi-client para linux (se puede descargar desde aquí http://www.orvant.com/packages). Y el pequeño script en perl que os pongo a continuación, podemos realizar un balanceo hacia servidores IIS según la carga de los mismos, redirigiendo siempre hacia el servidor con menos carga la petición
CGI en perl para realizar el balanceo
Se pude mejorar, pero funciona bastante bien, evidentemente el usuario clave puerto, servidores etc. hay que cambiarlo para cada caso.
CGI en perl para realizar el balanceo
#!/usr/bin/perl
$usuario="usuario";
$clave="clave";
$puerto="8080";
@servidores=("server1.dominio.tld","server2.dominio.tld");
$cmd_base="/usr/bin/wmic";
$query='"select CurrentConnections from Win32_PerfFormattedData_W3SVC_WebService"';
#el timeout del apache en este caso está en 300, pero usamos 180 por precaución
$tiempoespera=180/(scalar @servidores);
$srvredir=$servidores[0];
$minimo=1000;
foreach $srv (@servidores)
{
$comando=$cmd_base." -U $srv/$usuario\%$clave //$srv $query";
#damos un tiempo de timeout
eval {
local $SIG{'ALRM'}=sub { die "no responde\n"};
alarm($tiempoespera);
@resultado=split(/\n/,`$comando`);
alarm(0);
};
if($@)
{
print STDERR "Timeout de ejecución del servidor $srv";
next;
}
if($resultado[0]=~/failed/)
{
print STDERR "Timeout WMI del servidor $srv";
next;
}
foreach $linea (@resultado)
{
@totales=split(/\|/,$linea);
if($totales[1]=~/_Total/)
{ if($totales[0]<$minimo)
{
$minimo=$totales[0];
$srvredir=$srv;
}
last;
}
}
}
$URL="http://$srvredir:$puerto/";
print "Content-Type: text/html\n";
print "Location: $URL\n\n";
Se pude mejorar, pero funciona bastante bien, evidentemente el usuario clave puerto, servidores etc. hay que cambiarlo para cada caso.
sábado, 19 de mayo de 2012
Plugin para monitorizar el contenido de la pantalla
El objetivo de este plugin de Nagios es comprobar que una pantalla nos muestra algún contenido específico. No es la panacea, porque se basa en OCR, pero en nuestro caso sirvió perfectamente puesto que permite la monitorización de pantallas de información para comprobar si están funcionando y mostrando la info que queremos o no.
La instalación requiere tesseract-ocr e imagemagick, así como algún módulo de perl adicional.
Es recomendable hacer el siguiente cambio en el módulo de tesseract de perl para evitar ciertas salidas en medio de nuestro script:
Localizamos Tesserat.pm normalmente ubicado en
/usr/local/share/perl/X.Y.Z/Image/OCR/Tesseract.pm (en Debian)
donde X.Y.Z es la versión de perl que corresponda
Modificamos la línea donde se ejecuta el tessaract y añadir una redir del STDOUT a /dev/null
Es decir donde pone
La instalación requiere tesseract-ocr e imagemagick, así como algún módulo de perl adicional.
Instrucciones de prerequisitos (Debian Based distro)
apt-get install tesseract-ocr apt-get install imagemagick perl -MCPAN -eshell cpan shell -- CPAN exploration and modules installation (v1.9402) Enter 'h' for help. cpan[1]> install Image::OCR::Tesseract cpan[1]> install Net::VNC
Es recomendable hacer el siguiente cambio en el módulo de tesseract de perl para evitar ciertas salidas en medio de nuestro script:
Localizamos Tesserat.pm normalmente ubicado en
/usr/local/share/perl/X.Y.Z/Image/OCR/Tesseract.pm (en Debian)
donde X.Y.Z es la versión de perl que corresponda
Modificamos la línea donde se ejecuta el tessaract y añadir una redir del STDOUT a /dev/null
Es decir donde pone
añadir >/dev/null tal que estomy $cmd = ( sprintf '%s %s %s', $WHICH_TESSERACT, shell_quote($abs_image), shell_quote($abs_image) ) . ( defined $lang ? " -l $lang" : '' ) . " 2>/dev/null";
my $cmd = ( sprintf '%s %s %s', $WHICH_TESSERACT, shell_quote($abs_image), shell_quote($abs_image) ) . ( defined $lang ? " -l $lang" : '' ) . " 2>/dev/null >/dev/null";
Código fuente del Script
#!/usr/bin/perl`/bin/rm -f $P1`;
use strict;
use warnings;
use Getopt::Std;
use Image::OCR::Tesseract 'get_ocr';
use File::Which 'which';
my $prg_n = "verificapantallas.pl";
my $prg_v = "v1.0";
my %opts;
my $vncc=which('vnccapture');
my $timeout="30";
my $retval = {
OK => 0,
WARNING => 1,
CRITICAL => 2,
UNKNOWN => 3
};
sub uso {
print @_ if @_;
print <<"EOF";
Uso: $prg_n -H <hostname|ip>
-H Hostname o IP de la pantalla a monitorizar
-P Clave de acceso VNC
-S Cadena a buscar
-U Realiza la comparación con todo e mayúsculas
-h Muestra esta ayuda
EOF
print "$prg_n $prg_v by Clean75" unless @_;
exit $retval->{UNKNOWN};
}
getopts('H:P:S:h:U', \%opts);
uso if defined $opts{h};
uso("Introduzca un nombre de host o IP!\n") unless defined $opts{H};
uso("Introduzca la clave del VNC!\n") unless defined $opts{P};
uso("Introduzca la cadena a comprobar!\n") unless defined $opts{S};
my $srv=$opts{H};
my $clave=$opts{P};
my $cadena=$opts{S};
my $flag_mayus = $opts{U};
my $P1="/tmp/$srv$$.png";
if(!-e $vncc)
{
uso("No se ha encontrado el $vncc\n");
}
$SIG{ALRM} = sub {
print "Error de timeout. Puedes incrementarlo (actual: $timeout)";
exit $retval->{CRITICAL};
};
`$vncc -H $srv -P $clave -o $P1`;
my $texto;
$texto=get_ocr($P1);
if($flag_mayus)
{
$cadena=uc($cadena);
$texto=uc($texto);
}
if($texto=~/$cadena/)
{
print "OK: Pantalla $srv\n";
exit $retval->{OK};
}
else
{
print "CRITICAL: Pantalla $srv está malita\n";
exit $retval->{CRITICAL};
}
Prueba del script
(datos de parámetros ficticios, cada uno que ponga los que necesite)/usr/lib/nagios/plugins/verificapantallas.pl -H 100.100.100.100 -P Clave -S Texto
Imprimir adjuntos de Outlook automáticamente
A veces, vamos viendo el correo de camino al trabajo, o cuando estamos fuera de la oficina, y nos gustaría que cuando llegásemos el adjunto que estamos leyendo estuviese impreso, con este fin he hecho esta pequeña macro en VB que me imprime los adjuntos según una regla de correo.
Se recomienda que en la regla se pongas parámetros adecuados, por ejemplo la mía tiene que si el mail viene de mi mismo y contiene una determinada clave en el asunto me imprima los adjuntos.
Bien, la macro es la siguiente:
Luego hay que crear una regla con los parámetros que creamos oportunos y decirle que ejecute el script.
La he probado en Outlook 2010 que es lo que yo uso.
Desventajas de este sistema, evidentemente necesitamos un equipo encendido con el Outlook abierto, bien puede ser una máquina virtual....
Se recomienda que en la regla se pongas parámetros adecuados, por ejemplo la mía tiene que si el mail viene de mi mismo y contiene una determinada clave en el asunto me imprima los adjuntos.
Bien, la macro es la siguiente:
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
(ByVal hwnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Sub ImprimeMensajeAdjuntos(Item As Outlook.MailItem)
Dim Atmt As Outlook.Attachment
Dim FileName As String
Dim i As Integer
Dim l As Long
For Each Atmt In Item.Attachments
FileName = "C:\Temp\" & Atmt.FileName
Atmt.SaveAsFile FileName
l = ShellExecute(0, "Print", FileName, "", "", 1)
Next
Item.Delete
End Sub
Luego hay que crear una regla con los parámetros que creamos oportunos y decirle que ejecute el script.
La he probado en Outlook 2010 que es lo que yo uso.
Desventajas de este sistema, evidentemente necesitamos un equipo encendido con el Outlook abierto, bien puede ser una máquina virtual....
domingo, 21 de febrero de 2010
Aumentar tamaño de base de datos exchange 2007
A partir de SP1 el límite es de 250GB, para pasar de aquí hay que hacer lo mismo que antes
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\MSExchangeIS\\Private-
Crear la clave "Database Size Limit in Gb" Y poner el valor hasta el que queramos crecer.
Nota: el tamaño de fichero de base de datos de exchange 2007 standard y enterprise no está limitado, pero debe tenerse en cuenta que existe la limitación del Extensible Storage Engine (ESE) que actualmente anda por los 16TB y evidentemente también las limitaciones del sistema operativo NTFS (anda por los 16TB - 64 Kb)
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\MSExchangeIS\
Crear la clave "Database Size Limit in Gb" Y poner el valor hasta el que queramos crecer.
Nota: el tamaño de fichero de base de datos de exchange 2007 standard y enterprise no está limitado, pero debe tenerse en cuenta que existe la limitación del Extensible Storage Engine (ESE) que actualmente anda por los 16TB y evidentemente también las limitaciones del sistema operativo NTFS (anda por los 16TB - 64 Kb)
martes, 2 de febrero de 2010
Fondo de escritorio vía gpo en windows 7
No actualiza el fondo de pantalla en windows 7.
Crear la clave de registro
[HKEY_CURRENT_USER\Control Panel\Desktop\WallPaper] de tipo String.
Si no actualiza aún así le ponemos un valor cualquiera y actualizamos las directivas
Crear la clave de registro
[HKEY_CURRENT_USER\Control Panel\Desktop\WallPaper] de tipo String.
Si no actualiza aún así le ponemos un valor cualquiera y actualizamos las directivas
jueves, 14 de enero de 2010
Desinstalar aplicaciones desde línea de comandos via wmic
- Ver aplicaciones instaladas:
wmic /node:EQUIPODESTINO PRODUCT GET NAME - Desinstalar aplicación en concreto
wmic /node:EQUIPODESTINO PRODUCT where name="Nombre APP" call uninstall
- EQUIPODESTINO: es el nombre o ip del equipo del que queremos desinstalar el producto
- Nombre APP: es el nombre de la aplicación a desinstalar según el listado anterior
Suscribirse a:
Entradas (Atom)
L2TP Ipsec Windows to Mikrotik eror 789
Add this to registry REG ADD HKLM\SYSTEM\CurrentControlSet\Services\PolicyAgent /v AssumeUDPEncapsulationContextOnSendRule /t REG_DWORD /d...
-
A veces, vamos viendo el correo de camino al trabajo, o cuando estamos fuera de la oficina, y nos gustaría que cuando llegásemos el adjunto ...
-
Add this to registry REG ADD HKLM\SYSTEM\CurrentControlSet\Services\PolicyAgent /v AssumeUDPEncapsulationContextOnSendRule /t REG_DWORD /d...
-
Muchas veces nos interesa tener un adaptador de red local del equipo para hacer nuestras pruebas de programación, cambiarle la MAC y cosas a...