Nota: questa guida riguarda le vecchie versioni di Windows. Per le più recenti basta usare QEMU-Guest-Agent: https://pve.proxmox.com/wiki/Qemu-guest-agent#Windows
I server Microsoft purtroppo non gestiscono in modo uniforme (XP ha un comportamento, 2000 un’altro, 2003 un’altro ancora…) la modalità “gracefully stop” e pertanto si è scelto di installare su di ogni server Microsoft virtualizzato il software poweroff.
Poweroff è liberamente scaricabile dal seguente indirizzo:
http://users.telenet.be/jbosman/applications.html
LATO SERVER M$
– copiare il file “poweroff.exe” in una qualsiasi cartella (es. c:\programmi\poweroff)
– eseguirlo almeno una volta
– configurare la sezione “Select computer” impostando “Local Computer”
– configurare la sezione “Action” impostando il valore “No action”
– configurare la sezione “Options” impostando i valori “Force application to close”, “Visible in tray”, “Allow cancel”, “Allow remote control”
– selezionare “Settings” nella sezione “Options” e impostare la password di accesso da utilizzare per lo spegnimento (es. lamiasuperpasswordsegretissimaesequalcunoprovaacrackarlaglispezzolebraccine)
– configurare la sezione “When” impostando il valore “Immediate”
– selezionare la voce di menu “Services / Create services”
– selezionare la voce di menu “Service / Save settings to service”
– chiudere l’applicativo tramite il pulsante “Close”
LATO PROXMOX, è stato installato “expect” per gestire le comunicazioni tra host e server virtualizzati tramite apposito script.
apt-get install expect
e utilizzo il seguente script per forzare lo spegnimento del server M$:
cat /usr/bin/spegniserverms.sh
#!/usr/bin/expect
# procedure to attempt connecting; result 0 if OK, 1 otherwise
proc connect {} {
expect {
"201 Welcome to Poweroff 3.0.1.3 created by Jorgen Bosman" {
send "PASSWORD lamiasuperpasswordsegretissimaesequalcunoprovaacrackarlaglispezzolebraccine\r"
expect {
"250 OK" {
return 0
}
}
}
}
# timed out
return 1
}
set nomeserver [lindex $argv 0]
if { $nomeserver == "" } {
puts "Utilizzo: \n"
exit 0
}
set timeout 5
spawn telnet [lindex $argv 0] 3210
set rez [connect ]
if { $rez == 0 } {
send "ACTION shutdown\r"
expect "250 OK"
send "DOIT\r"
expect "250 OK"
send "QUIT\r"
expect eof
exit 0
}
puts "\nErrore di connessione al server $nomeserver\n"
exit 0
chmod 770 /usr/bin/spegniserverms.sh
utilizzo la seguente sintassi per forzare lo spegnimento del server
spegniserver IPDELSERVER