-
Notifications
You must be signed in to change notification settings - Fork 0
/
shutdown_win_lin_from_linux.sh
106 lines (70 loc) · 2.86 KB
/
shutdown_win_lin_from_linux.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#!/bin/bash
#Creo la funzione che mi consente di eseguire le sequenze di comandi
function jumpto
{
label=$1
cmd=$(sed -n "/$label:/{:a;n;p;ba};" $0 | grep -v ':$')
eval "$cmd"
exit
}
start=${1:-"start"}
jumpto $start
start:
#Inizio a loggare
echo "*****************************************************" |tee -a log.txt
#Prendo una lista esterna costruita con IP,NOMEMACCHINA e pingo una volta IP per vedere se la macchina sia accesa,
#se si mando lo shutdown, scrivo nel log.
echo "Controllo i computer linux accesi e lancio lo shutdown" |tee -a log.txt
IFS=","
while read ip name
do
ping -c2 -W1 "$ip" && sshpass -p PASSWORD ssh -o StrictHostKeyChecking=no -t -t USERNAME@"$ip" ' sudo poweroff' >/dev/null && echo "Ho lanciato lo shutdown di "$name""
done < linux.txt
echo"" |tee -a log.txt
echo "Controllo i computer windows accesi e lancio lo shutdown" |tee -a log.txt
IFS=","
while read ip name
do
ping -c2-W1 "$ip" && net rpc shutdown -I "$ip" -f -t 1 -U USERNAME%PASSWORD |& tee -a log.txt && echo "Ho lanciato lo shutdown di "$name"" | tee -a log.txt
done < windows.txt
jumpto mid
mid:
sleep 5
clear
#Metto un timer di 40 secondi per essere ragionevolmente sicuro che tutto si spenga
echo "Per favore attendi che i computer si spengano"
for i in {9..0}; do echo -ne "\033[0;31m$i\033[0m"'\r'; sleep 1; done; echo
#Faccio una seconda passata per vedere se qualcosa altro è acceso e avviso
echo "" |tee -a log.txt
clear
echo "Controllo se qualcosa è ancora acceso" |tee -a log.txt
while read ip name; do
ping -c2 -W1 $ip >/dev/null && echo ""$name" è ancora acceso, devo ricontrollarlo" |& tee -a log.txt || echo ""$name" è spento" |& tee -a log.txt
done < linux.txt
while read ip name; do
ping -c2 -W1 $ip >/dev/null && echo "$name è ancora acceso, devo ricontrollarlo" |& tee -a log.txt || echo "$name è spento" |& tee -a log.txt
done < win.txt
#Metto un timer di 10 secondi per essere ragionevolmente sicuro che tutto si spenga
echo ""
echo "Per favore attendi ancora dieci secondi"
for i in {9..0}; do echo -ne "\033[0;31m$i\033[0m"'\r'; sleep 1; done; echo
echo "" |& tee -a log.txt
clear
echo ""|& tee -a log.txt
echo "Secondo e ultimo controllo" |tee -a log.txt
IFS=","
while read ip name
do
ping -c2 -W1 $ip >/dev/null && echo -e "\e[0;31m$name è ancora acceso, verifica!\e[0m" && echo "$name è ancora acceso" >> log.txt || echo -e "\e[0;32m$name è spento\e[0m" && echo "$name è spento" >> log.txt
done < linux.txt
IFS=","
while read ip name
do
ping -c2 -W1 $ip >/dev/null && echo -e "\e[0;31m$name è ancora acceso, verifica!\e[0m" && echo "$name è rimasto acceso" >> log.txt
done < windows.txt
#Chiudo il log
echo "*****************************************************" |tee -a log.txt
jumpto finish
finish:
#Comprimo il file di log e lo rinomino con la data
gzip log.txt && mv log.txt.gz shutdown_`date +%d%b%Y_%H:%M:%S`.gz