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