Shutdown en vbscript

Bonjour,je cherche depuis pas mal de temps un moyen d'éteindre mon pc en vbscript j'ai trouver pas mal de poste avec des codes mais je voudrais l'éteindre sans fenêtre qui me demande le mon du pc ou le temp avant l'extinction
je vous envoie un des code que j'ai trouver:

Dim objShell, strComputer, strInput
Dim strShutdown

Do
strComputer = (InputBox(" ComputerName to shutdown", "Computer Name"))
If strComputer <> "" Then
strInput = True
End if
Loop until strInput = True

strShutdown = "shutdown -s -t 0 -f -m \\" & strComputer

set objShell = CreateObject("WScript.Shell")

objShell.Run strShutdown

Wscript.Quit

je precise que je debute en vbscript
merci d'avance
Configuration: Windows xp
Firefox 3.0

13 réponses

  1. Bonjour,

    Je suis moi-même débutant en VBS, mais la réponse était dans le script...
    Il demande le nom de l'ordinateur, il suffit d'annuler la demande en faisant "." :
    Dim objShell, strComputer, strInput
    Dim strShutdown
    
    Do
    strComputer = "."
    If strComputer <> "" Then
    strInput = True
    End if
    Loop until strInput = True
    
    strShutdown = "shutdown -s -t 0 -f -m \\" & strComputer
    
    set objShell = CreateObject("WScript.Shell")
    
    objShell.Run strShutdown
    
    Wscript.Quit
    6
    1. j'ai trouver sa
      Si votre application doit disposer d'un privilège, pour certains actions (comme par exemple demander l'extinction du poste de travail), vous pourrez utiliser la fonction ci-dessous. Notez qu'il est conseillé de toujours retirer un privilège une fois l'action effectuée.

      La fonction suivante donne ou retire (suivant la valeur du paramètre grant le privilège donné en paramètre name :

      bool __fastcall SetPrivilege(AnsiString name, bool grant)
      {
      TOKEN_PRIVILEGES wTokenIn, wTokenOut;
      DWORD wLength;
      HANDLE wCurrentProcess, wToken;
      _LUID wLuid;
      bool ret;

      wCurrentProcess = GetCurrentProcess();
      OpenProcessToken(wCurrentProcess, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &wToken);
      LookupPrivilegeValue(NULL, name.c_str(), &wLuid);
      wTokenIn.PrivilegeCount = 1;
      wTokenIn.Privileges[0].Luid = wLuid;
      wTokenIn.Privileges[0].Attributes = (grant?SE_PRIVILEGE_ENABLED:0);
      ret = AdjustTokenPrivileges(wToken, FALSE, &wTokenIn, sizeof(TOKEN_PRIVILEGES), &wTokenOut,&wLength))
      CloseHandle(wToken);

      return ret;
      }

      Par exemple, pour ajouter le paramètre SE_SHUTDOWN_NAME, effectuer une action, et retirer le privilège, en nous basant sur les informations du MSDN listant les constantes d'autorisation (voir plus bas), nous allons utiliser :

      SetPrivilege("SeShutdownPrivilege",true);
      // actions
      SetPrivilege("SeShutdownPrivilege",false);
      2
      1. Ton code ne fonctionne pas. Evidemment, car c'est du C... donc avec VBSscript....

        J'ai trouvé comment changer le niveau de privilèges. Ca se fait à la connexion à la WMI.
        Il faut donc modifier le code que je t'ai donné de la manière suivante :

        On Error Resume Next

        strComputer = "."
        Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate,(Shutdown)}\\" & strComputer & "\root\cimv2")
        if Err.Number <> 0 Then
        Wscript.Echo "Erreur à la connexion à " & strComputer & " : " & Err.Description
        Err.Clear
        wscript.quit
        end if
        Set oWindows = objWMIService.ExecQuery("Select Name From Win32_OperatingSystem")
        if Err.Number <> 0 Then
        Wscript.Echo "Erreur à la requête à " & strComputer & " : " & Err.Description
        Err.Clear
        wscript.quit
        end if

        For Each oSys In oWindows
        oSys.Win32ShutDown(5)
        if Err.Number <> 0 Then
        Wscript.Echo "Erreur à l'arrêt du système " & strComputer & " : " & Err.Description
        Err.Clear
        wscript.quit
        end if
        Next
        wscript.quit

        Ainsi, ça marche aux petits oignons.

        Bon courage.
        1
        1. j'ai trouver un code permettant d'activer .bat

          mais je galère pour le crée, j'ai le code mais je m'arrive pas a le crée avec shutdown -s dedans

          CreateObject(servername.typename [, location])

          si quelqu'un pourrait m'aider merci
          0
          1. je te propose le code suivant, en passant par la WMI.
            Cependant, je l'ai fabriqué à partir de 2 codes en ma possession (qui fonctionnaient séparément) et je ne suis pas ûr que le collage final fonctionne...

            On Error Resume Next
            strComputer = "."
            'connexion à la WMI locale
            Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
            ' requête sur les objets
            Set oWindows = objWMIService.ExecQuery("Select Name From Win32_OperatingSystem")
            For Each oSys In oWindows
            oSys.Win32ShutDown(5)
            Wscript.Echo "Arrêt système en cours : " & pComputer
            Next

            wscript.quit
            0
            1. merci du code il y a bien une fenêtre qui s'affiche "arrêt système en cours" mais il ne s'éteint pas pourtant l'orsque l'on lance un shutdown sans temp définit il s'éteint au bout de 30s mais la pas , tu peut teste?
              merci
              0
              1. c'est peut-être une question conne mais c'est possible que WMI soit désactiver?
                0
                1. Non, ce n'est pas ça.
                  si on remplace
                  oSys.Win32ShutDown(5) par oSys.Win32ShutDown(4) qui permet de fermer la session, ça marche.
                  Quand je fais afficher l'erreur, j'obtiens un message "privilège non maintenu"
                  Mais je suis sous vista....

                  Peux tu modifier le script de la manière suivante :

                  On Error Resume Next
                  strComputer = "."
                  'connexion à la WMI locale
                  Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
                  ' requête sur les objets
                  Set oWindows = objWMIService.ExecQuery("Select Name From Win32_OperatingSystem")
                  For Each oSys In oWindows
                  oSys.Win32ShutDown(5)
                  if Err.Number <> 0 Then
                  Wscript.Echo "Erreur à l'arrêt : " & strComputer & " : " & Err.Description
                  Err.Clear
                  wscript.quit
                  end if

                  Next

                  wscript.quit

                  Et voir le message qu'il t'affiche ???
                  -1
                  1. j'ai pareil "erreur a l'arrêt privilège non maintenu"
                    je vais voir ce que l'on peut faire
                    -1
                    1. OK, c'est bon à savoir.
                      En fait, au départ, mon code fonctionnait pour faire une extinction à distance d'un ordinateur.
                      Je me connectais à la WMI de celui-ci avec des privilèges d'administrateur, si bien que je n'avais jamais ce problème d'élévation de privilèges : ça fonctionnait toujours.

                      Donc ton problème est résolu ???
                      -1
                      1. merci de beaucoup de ton aide ca marche merci
                        -1