En fin, los que me conocéis sabéis que Java no es una de mis predilecciones, y estoy cansado de decir que Perl no está muerto.. pero bueno dejo dos datos importantes.
Uno es este estudio de redmonk The RedMonk Programming Language Rankings: June 2013
el otro es esta URL http://search.cpan.org/recent
Ahora quien me sigue diciendo que Perl está muerto, está claro que cada día hay más Javeros y menos Perleros... pero que le vamos a hacer... de todas formas estoy cansado de oír que Perl es como COBOL... una antigualla (a veces es mejor callarse que intentar rebatir cosas como estas...) A veces la gente menosprecia las cosas con una facilidad ... COBOL fue y sigue siendo bueno en determinadas cosas, Perl es una obra de arte.
sábado, 7 de septiembre de 2013
miércoles, 24 de octubre de 2012
Instalara VMWARE VSPHERE CLI 5 en Debian Mint
- Añadir en /etc/os-release un comentario tipo #mdadsa ubuntu. pq hace un grep -i de ubuntu. De esta manera nos encuentra los prerequisitos como si fuese una ubuntu con el dpkg -i
- Si no usas proxy y no tienes la variables de entorno http_proxy y ftp_proxy definidas comenta lo siguiente:
#if ( !( $ftpproxy && $httpproxy)) {Y con esto debería ir
# uninstall_file($gInstallerMainDB);
# exit 1;
#}
miércoles, 23 de mayo de 2012
Script para desbloqueo de cuentas de Active Directory
Desbloquea los usuarios de AD de todo el directorio
'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
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)
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...
-
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...
-
Microsoft 365 Apps that are deployed to multi-session environments are limited to two threads for multithreaded recalculation (MTR) and wo...