bonjour,
un script utile (de débutant mais qui focntionne) pour éviter de se déplacer quand on fait de la maintenance.
il permet d'avoir pas mal d'infos sur une machine win et après permet quasiement tout si vous faites vos scripts en bat, reg ou vbs pour les lancer sur la machine distante.
il faut :
-winexe
-zenity
-un dossier en lecture seule au moins, accessible depuis le réseau (à renseigner dans gdiag.conf)
-la suite pstools à insérer dans ce même dossier
ce script peut être très évolutif et très utile, j'utilise moi, une version non graphique avec nos scripts perso du boulot qu'on lance directement par le menu.
donc j'ai voulu le rendre général. vos remarques, conseils sont les bienvenu.
gdiag.sh
#! /bin/bash
# Effectue des diagnostiques et rapporte des informations sur des pc win
# Licence : GPL
# Dépendance : winexe, zenity, la suite pstools sur un serveur, rdesktop, samba
# Il faut un accès en lecture seule au moins sur un serveur acessible depuis l'exterieur (a renseigner dans gdiag.conf)
#à finir
#finir lancement script personnaliser (script) : vérifier la présence du fichier sur le serveur
#possibilité de tuer un processus avec tskill PID
. ./gdiag.conf
pingo="Ping"
nmap="Nmap"
proc="Processus en cours"
heure="Resynchroniser date & heure"
service="Services (processus) : start, stop, restart"
script="Lancer un script .vbs .reg ou .bat"
psinfo="Infos PC (programmes installés, SP, ram, HDD, etc..)"
mstsc="Ouvrir port RDP, rdesktop & fermer RDP"
msconfig="Afficher msconfig démarrage"
browse="Parcourir le disque C:/"
logs="Afficher les erreurs du journal d'évènements des 24H"
diag="Diag complet"
reboot="Rebooter la machine"
console="Accéder à la console DOS distante"
autre="Passer sur une autre machine"
quit="Quitter"
machine () {
target=$(zenity --entry --title="Gdiag" --text="Nom de machine ou IP");
if ping -c 1 -w 3 $target
then
mdp=$(zenity --entry --hide-text --title="Gdiag" --text="Mot de passe administrateur");
menu
else
echo "$target ne ping pas !!" | zenity --text-info --title="$target NE PING PAS !" --width 500 --height 200 && machine
fi
}
machine
menu () {
rm -Rf res.txt && killall winexe
action=`zenity --list --title "$titre" --width 500 --height 550 --radiolist --column=Choix --column "Action" TRUE "$pingo" FALSE "$nmap" FALSE "$proc" FALSE "$heure" FALSE "$service" FALSE "$script" FALSE "$psinfo" FALSE "$mstsc" FALSE "$msconfig" FALSE "$browse" FALSE "$logs" FALSE "$reboot" FALSE "$console" FALSE "$autre" FALSE "$diag" FALSE "$quit"`
}
while [ "$choix" != "quit" ]; do
menu
case "$action" in
"$pingo")
ping $target | zenity --text-info --width 700 --height 500 --title="$pingo de $target"
;;
"$nmap")
nmap $target | zenity --text-info --width 700 --height 500 --title="$nmap de $target"
;;
"$proc")
winexe -U "$target"/administrateur%$mdp //"$target" "cmd /k qprocess * /system & exit" | zenity --text-info --width 600 --height 800 --title="$proc"
;;
"$heure")
winexe -U "$target"/administrateur%$mdp //"$target" "cmd /k w32tm /resync /rediscover & exit" | zenity --progress --pulsate --auto-close && echo "Allume un cierge mais $target devrait être à l'heure maintenant" | zenity --text-info --title="$heure de $target" --width 400 --height 200
;;
#stopper, relancer ou lancer un service : mettre le nom du service sans l'extension
"$service")
serv=$(zenity --entry --title="Gdiag" --text="Nom du service");
action=`zenity --list --title "Services" --width 500 --height 550 --radiolist --column=choix --column "Action" TRUE "lancer" FALSE "stopper" FALSE "relancer" FALSE "$quit"`
case "$action" in
"lancer")
acte=start
;;
"stopper")
acte=stop
;;
"relancer")
acte=restart
;;
"quit")
menu
;;
esac
winexe -U "$target"/administrateur%$mdp //"$target" "cmd /k \\\\"$serveur"\psservice.exe /accepteula $acte $serv & exit" | zenity --progress --pulsate --auto-close && echo "le service $serv est $acte sur $target" | zenity --text-info --width 400 --height 200 --title="$relancetb2 sur $target"
;;
# pour lancer un programme bat vbs ou reg depuis le dossier du serveur : mettre le nom exacte du fichier avec extension
"$script")
#choix du fichier script
file=$(zenity --entry --title="Gdiag" --text="Nom du script dans le dossier $serveur avec son extension :");
#vérifie l'extension du fichier
ext=`echo $file | grep -o '\.[^.]*$'`
case $ext in
".bat")
winexe -U "$target"/administrateur%$mdp //"$target" "cmd /k start \\\\"$serveur"\\"$file" & exit" | zenity --progress --pulsate --auto-close && echo "$file lancé sur $target" | zenity --text-info --title="Lancement de $file sur $target" --width 400 --height 200
;;
".BAT")
winexe -U "$target"/administrateur%$mdp //"$target" "cmd /k start \\\\"$serveur"\\"$file" & exit" | zenity --progress --pulsate --auto-close && echo "$file lancé sur $target" | zenity --text-info --title="Lancement de $file sur $target" --width 400 --height 200
;;
".vbs")
winexe -U "$target"/administrateur%$mdp //"$target" "cmd /k cscript \\\\"$serveur"\"$file" & exit"" | zenity --progress --pulsate --auto-close && echo "$file lancé sur $target" | zenity --text-info --title="Lancement de $file sur $target" --width 400 --height 200
;;
".VBS")
winexe -U "$target"/administrateur%$mdp //"$target" "cmd /k cscript \\\\"$serveur"\"$file" & exit"" | zenity --progress --pulsate --auto-close && echo "$file lancé sur $target" | zenity --text-info --title="Lancement de $file sur $target" --width 400 --height 200
;;
".reg")
winexe -U "$target"/administrateur%$mdp //"$target" "regedit /S \\\\"$serveur"\"$file" & exit"" | zenity --progress --pulsate --auto-close && echo "$file lancé sur $target" | zenity --text-info --title="Lancement de $file sur $target" --width 400 --height 200
;;
".REG")
winexe -U "$target"/administrateur%$mdp //"$target" "regedit /S \\\\"$serveur"\"$file" & exit"" | zenity --progress --pulsate --auto-close && echo "$file lancé sur $target" | zenity --text-info --title="Lancement de $file sur $target" --width 400 --height 200
;;
*)
zenity --warning --text="extension non supportée"
;;
esac
;;
#liste les infos pc
"$psinfo")
winexe -U "$target"/administrateur%$mdp //"$target" "cmd /k \\\\"$serveur"\psinfo.exe -d -s /accepteula & exit" | zenity --text-info --title="$psinfo de $target" --width 700 --height 300
;;
#ouvre le port RDP, lance rdesktop et ferme le port RDP
"$mstsc")
winexe -U "$target"/administrateur%$mdp //"$target" "regedit /S \\\\"$serveur"\mstscon.reg"
notify-send -i /usr/share/icons/gnome/scalable/apps/gnome-terminal.svg Hop "Ouverture du Terminal serveur client sur "$target"" && sleep 5 && rdesktop "$target" && winexe -U "$target"/administrateur%$mdp //"$target" "regedit /S \\\\"$serveur"\mstscoff.reg" && notify-send -i /usr/share/icons/gnome/scalable/apps/gnome-terminal.svg Hop "Fermeture du Terminal serveur client sur "$target""
;;
#msconfig
"$msconfig")
winexe -U "$target"/administrateur%$mdp //"$target" "cmd /k reg query HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run & exit" > res.txt 2>&1 | zenity --progress --pulsate --auto-close
cat res.txt |grep REG_SZ | zenity --text-info --title="$msconfig de $target" --width 700 --height 300
;;
"$browse")
`nautilus smb://administrateur@"$target"/c$`
;;
#affiche les erreurs du journal d'évènements des 24H
"$logs")
winexe -U "$target"/administrateur%$mdp //"$target" "cmd /k \\\\"$serveur"\psloglist.exe -d 1 -f e /accepteula & exit" >res.txt | zenity --progress --pulsate --auto-close && cat res.txt|grep -e ] -e Time| zenity --text-info --title="$autorun de $target" --width 400 --height 200
;;
#ping, nmap, liste processus, infos pc, msconfig et erreurs journal évènement des 24H
"$diag")
rm -f resultat.txt
ping3=`ping -c 3 "$target"`
echo -n "#### \\033[1;31mPING\\033[0m ####"
echo -n "#### PING ####" > resultat.txt
echo " " >> resultat.txt
echo " " >> resultat.txt
echo -n "$ping3" >> resultat.txt
echo " " >> resultat.txt
echo " " >> resultat.txt
echo -n "#### \\033[1;31mNMAP\\033[0m ####" &&
echo " " >> resultat.txt
echo "#### NMAP ####" >> resultat.txt
echo " " >> resultat.txt
gnome-terminal -x nmap "$target" -o nmap.txt && sleep 4 && cat nmap.txt |grep -v Nmap | grep -v Interesting >> resultat.txt
echo -n "#### \\033[1;31mINFOS PC\\033[0m ####"
echo -n "#### INFOS PC ####" >> resultat.txt
winexe -U "$target"/administrateur%$mdp //"$target" "cmd /k \\\\"$serveur"\psinfo.exe -d -s /accepteula & exit" >> resultat.txt
echo " " >> resultat.txt
echo -n "#### \\033[1;31mPROCESSUS\\033[0m ####"
echo -n "#### PROCESSUS ####" >> resultat.txt
echo " " >> resultat.txt
echo " " >> resultat.txt
winexe -U "$target"/administrateur%$mdp //"$target" "cmd /k qprocess * /system & exit" >> resultat.txt
echo -n "#### \\033[1;31mMSCONFIG\\033[0m ####"
echo " " >> resultat.txt
echo -n "#### MSCONFIG ####" >> resultat.txt
echo " " >> resultat.txt
winexe -U "$target"/administrateur%$mdp //"$target" "cmd /k reg query HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run & exit" > res.txt && cat res.txt |grep REG_SZ >> resultat.txt
echo " "
echo "rapport terminé" && clear && cat resultat.txt | zenity --text-info --title="$diag de $target" --width 800 --height 600
;;
#reboot
"$reboot")
net rpc shutdown -r -C "Votre ordianteur va redémarrer" -f -I "$target" -U administrateur%$mdp | zenity --text-info --title="reboot de $target en cours..." --width 400 --height 400
;;
#ok, tapez exit pour terminer le processus correctement
"$console")
gnome-terminal -x winexe -U "$target"/administrateur%$mdp //"$target" "cmd /k qprocess * /system" &
;;
"$autre")
machine
;;
"$quit")
break;;
*)
esac
done
exit 0
le fichier de conf pauvre mais utile pour que ca serve à tout le monde
gdiag.conf
#mettre de la forme serveur="ip-serveur\mon dossier\scripts"
serveur=
et 2 tout petit .reg (a mettre aussi dans le dossier) qui servent dans le script... à vous de faire les votre après :
mstscon.reg
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server]
"fDenyTSConnections"=dword:00000000
mstscoff.reg
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server]
"fDenyTSConnections"=dword:00000001
voilà.
Bon app!