A voir également:
- Vbs shutdown script
- Chrono shutdown - Télécharger - Personnalisation
- Script vidéo youtube - Guide
- Vbs windows - Accueil - Optimisation
- Raccourci shutdown - Guide
- Mas script - Accueil - Windows
13 réponses
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 "." :
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
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);
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);
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.
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.
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
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
merci
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 ???
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 ???
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 ???
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 ???