Reboot du systeme

Résolu
fcampagne Messages postés 195 Date d'inscription vendredi 3 juin 2005 Statut Membre Dernière intervention 13 juillet 2006 - 31 mai 2006 à 15:45
fcampagne Messages postés 195 Date d'inscription vendredi 3 juin 2005 Statut Membre Dernière intervention 13 juillet 2006 - 1 juin 2006 à 13:39
Salut a tous
Je souhaiterais pouvoir redémarrer une machine a distance par l'intermédiaire du page asp en cliquant sur un bouton
J'ai donc réaliser ma fonction utlisant WMI

Function reboot() As Integer
        Dim objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate,(Shutdown)}!\" & ma_machine & "\root\cimv2")
        Dim colOperatingSystems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
        Dim objOperatingSystem
        For Each objOperatingSystem In colOperatingSystems
            Return objOperatingSystem.Reboot()
        Next
    End Function

La fonction me retourne bien le code 0 qui correspond a la réussite du reboot mais la machine ne redémarre pas!

Je souhaiterais également afficher une alert box pour confirmer le choix de l'utilisateur pour redémarrer une machine, j'arrive bien a afficher l'alert mais je n'arrive pas a récupérer le choix de l'utilisateur ( soit click ok ou click annulé)
auriez vous une idée??

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Response.Write("<script>confirm('Êtes-vous sûr de vouloir redémarrer la machine " & ma_machine & " ?');</script>")
'comment bloquer ici si l'utilisateur a cliqué sur annulé???
        Response.Write(reboot())
    End Sub

4 réponses

fcampagne Messages postés 195 Date d'inscription vendredi 3 juin 2005 Statut Membre Dernière intervention 13 juillet 2006 3
1 juin 2006 à 13:39
Bon pour le reboot c ok j'ai enfin trouvé

voila le code pour ce que ca intérésse

    Function reboot(byval ipdelamachine as string) As Integer
        Dim resultat As Integer
        Dim oq As ObjectQuery
        Dim query As ManagementObjectSearcher = Nothing
        Dim ms As ManagementScope
        Dim queryCollection As ManagementObjectCollection = Nothing
        Dim MonMO As ManagementObject = Nothing

        ms = New System.Management.ManagementScope("\" + ipdelamachine + "\root\cimv2")
        oq = New System.Management.ObjectQuery("SELECT * FROM Win32_OperatingSystem")
        query = New ManagementObjectSearcher(ms, oq)
        queryCollection = query.Get()
        For Each MonMO In queryCollection
            resultat = MonMO.InvokeMethod("Reboot", Nothing)
        Next
        Return resultat
    End Function
3
Coolpix08 Messages postés 150 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 21 décembre 2007 2
31 mai 2006 à 16:16
si cest vraiment le code que tu utilise, perso je vois pas trop apart que response.write écrit directement le code html en sortie et dapres ce que je peut voir le premier Write ferme la balise script et body.
Faudrait peut etre que tu ecrive le code complet pour demander la confirmation ET mettre le code au niveau client pour faire rebooter la machine DANS la balise  script.

<script>
 // code pour demander la confirmation
//Si oui
    //  code pour faire rebooter la machine
// Sinon
    // autre
</script>

sans oublier bien sur que Write prend un "String"

Enfin ce n'est que mon avis en espérant que ca puisse t'aider....
0
fcampagne Messages postés 195 Date d'inscription vendredi 3 juin 2005 Statut Membre Dernière intervention 13 juillet 2006 3
31 mai 2006 à 16:24
Merci pour ton avis, en premier lieu je voudrais me concentré sur le reboot
La méthode que j'emploi utilise une requéte WQL pour WMI, de cette maniére j'arrive a arréter ou démarrer un service, mais la je bloque sur la méthode qui permet de rebooter, j'ai calquer cette méthode sur celles que j'ai déja utilisé et qui marche mais celle ci me dit que le reboot c'est bien passé( code de retour 0) mais en réalité le pc ne redémarra pas du tout!
Je m'interroge donc sur le pourquoi, qu'est qui fait que ca ne marche pas?
0
Coolpix08 Messages postés 150 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 21 décembre 2007 2
31 mai 2006 à 19:40
Ouah...
La je tavoue que ya un truc qui m'échappe completement...
je suppose vu la syntaxe que tu es en ASP.NET donc il y a une partie client et une partie serveur.
Donc deja pour ta remark :
 'comment bloquer ici si l'utilisateur a cliqué sur annulé???

Ben tu peux pas...faut bien faire la difference entre le code executer coté client et celui coté serveur.
au moment du response ( coté serveur ) la page POUR le client est entrain de se former mais elle n'est pas encore envoyer.
Elle le sera qu'à la fin de la fonction en cours.

Tu n'a qu'à mettre sur ta page 2 bouton 'confirmer' 'annuler' et sur evenement clik de l'un ou lautre tu fait le traitement.
Parce que la en cliquant sur le bouton,la confirmation va se faire sur le prochain raffraichissement.
Du coup tu va avoir l'alert mais le reboot sera deja executé -> car c'est du code executer coté serveur AVANT le retour de la page.

Pour ton reboot...si vraiment ta methode est fiable et que tu es sur que ca vient pas de ca...ben regarde si ta les droits sur les autres machines...la je connais pas trop le code...mais je voit pas le rapport avec le reste du code.
A moins que ta question ne portait vraiment QUE sur le code du reboot. Ben la je passe mon tour
0
Rejoignez-nous