Shutdown en vbscript

seth -  
lsjduejd Messages postés 60 Date d'inscription   Statut Membre Dernière intervention   -
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
A voir également:

13 réponses

lsjduejd Messages postés 60 Date d'inscription   Statut Membre Dernière intervention   15
 
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
seth
 
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
manirac Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   6
 
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
seth
 
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
manirac Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   6
 
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
seth
 
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
seth
 
c'est peut-être une question conne mais c'est possible que WMI soit désactiver?
0
manirac Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   6
 
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
seth
 
ok j'essai merci
-1
seth
 
j'ai pareil "erreur a l'arrêt privilège non maintenu"
je vais voir ce que l'on peut faire
-1
seth
 
sinon l'autre marche niquel
-1
manirac Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   6
 
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
seth
 
merci de beaucoup de ton aide ca marche merci
-1