'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....
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...
-
Al restaurar una imagen de un equipo a otro, o simplemente al cambiar la placa base del equipo, el controlador de disco que necesitamos c...
-
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 ...
-
apt-get install openfortivpn Crear fichero de configuracion /etc/openfortivpn/config # config file for openfortivpn, see man openfortivpn...