Primer exemple d’execució remota de pstools: winps.sh

La següent missió era fer scripts que executessin les diferents pstools remotament. Vaig començar fent-ne un per cada, pero vaig trobar que tots compartien molta part de codi, així que vaig decidir crear un script generic, psexec.sh (en “honor” al psexec de les pstools), al que li poguessim passar el nom del servidor i la eina que voliem executar, amb els seus parametres. I després l’unic que ens quedaria seria crear un wrapper per cada comanda que ens fes la feina mes còmoda.

El script ha de comprovar si les credencials del fitxer són bones, i demanar-ne d’altres si no ho són. Un cop autenticat, ha de comprovar si existeixen les pstools o no, i copiar-les en cas que no.

En la historia completa podreu veure el codi del psexec.sh i d’un wrapper d’exemple, el winps.sh. Recordeu que per funcionar, necessiten dels fitxers winvars.sh i cp_pstools.sh, que apareixien en rc=$?

if [ $rc -eq 0 ];then
echo "Default credentials"
elif [ $rc -eq 1 ];then
echo "$? Hola"
echo "Default credentials doesn't authentify. Try others."
read -p "Type username (DOMAIN/user):" user
read -s -p "Type password:" pass
PSCREDENTIALS="--user $user --password $pass"
winexe //$1 "$TOOLS_UNIT:\$TOOLS_DIR\pstools\pslist.exe /accepteula -t" $PSCREDENTIALS
rc=$?
if [ $rc -eq 1 ];then
echo "Credentials error or unit not available (check smbmount errors)" && exit 1
elif [ $rc -eq 99 ];then
echo "There's no pstools, I'll copy them"
$PROGPATH/cp_pstools.sh $1 $user $pass
[ $? -ne 0 ] && echo "There's no pstools and I couldn't copy them." && exit 1
winexe //$1 "d:\scripts\pstools\pslist.exe /accepteula -t" $PSCREDENTIALS
rc=$?
if [ $rc -eq 99 ];then
echo "Pstools are copied, but they don'y work, somethings going on." && exit 1
fi
fi
elif [ $rc -eq 99 ];then
echo "There's no pstools, I'll copy them"
$PROGPATH/cp_pstools.sh $1
[ $? -ne 0 ] && echo "There's no pstools and I couldn't copy them." && exit 1
winexe //$1 "d:\scripts\pstools\pslist.exe /accepteula -t" $PSCREDENTIALS
rc=$?
if [ $rc -eq 99 ];then
echo "Pstools are copied, but they don'y work, somethings going on." && exit 1
fi
fi

Exemple de wrapper: winps.sh

#!/bin/bash

[ $# -ne 1 ] && echo "Error, I need one and only one argument" && exit 1
PROGPATH=echo $0 | /bin/sed -e 's,[\/][^\/][^\/]*$,,'
$PROGPATH/psexec.sh $1 pstools\pslist -t

Tomàs

Tomàs

Ja posaré alguna cosa