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)) {
      #   uninstall_file($gInstallerMainDB);
      #   exit 1;
      #}
Y con esto debería ir

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

#!/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.

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
my $cmd =
      ( sprintf '%s %s %s',
         $WHICH_TESSERACT,
         shell_quote($abs_image),
         shell_quote($abs_image)
      ) .
      ( defined $lang ? " -l $lang" : '' ) .
      "  2>/dev/null";
añadir >/dev/null tal que esto
 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
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);
}
        `/bin/rm -f $P1`;
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:

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....

L2TP Ipsec Windows to Mikrotik eror 789

 Add this to registry REG ADD HKLM\SYSTEM\CurrentControlSet\Services\PolicyAgent /v AssumeUDPEncapsulationContextOnSendRule /t REG_DWORD /d...