Page 1 sur 1
[..] Extinction et allumage de pc à distance
Posté : ven. 23 juil. 2010 19:24
par cyberhunter
Bonjour,
je suis débutant en script autoit
je cherche à créer 2 scripts en fait
un pour gérer l'extinction d'un parc de pc
et un autre pour l'allumage via wake on wan serait bien sinon wake on lan
j'ai déjà cherche sur le forum mais malheureusement aucun n'utilise de base mysql
ma base comporte 5 champs
id_pc,ip,adresse_mac,extinction,allumage
le script d'allumage ne doit réveiller que les pc avec le champs allumage=1
le script d'extinction ne doit éteindre que les pc avec le champs extinction=1
et si possible ?
une vérification après le lancement des commandes afin de vérifier que le ping repond ou pas
et mettre à jour une table log avec l'id_pc afin de savoir si l'extinction a fonctionné ou si l'allumage a fonctionné
un grand grand merci à celui ou ceux qui veulent bien m'aider
sinon pas grave
je devrais continuer à utiliser des méthodes oldschool avec des fichiers textes pas pratique à administrer
Merci
Re: [..]Extinction et allumage de pc à distance
Posté : ven. 23 juil. 2010 19:47
par Jerome
Je pense qu'il faudrait que vous cherchiez du coté de PsExec pour lancer des scripts sur un PC distant. (pour l'extinction)
Pour l'allumage, j'ai pas d'idée pour le moment :s
Aprés, c'est plutôt des commandes de base dans Auto It il me semble pour éteindre un PC.
Jérôme
Re: [..]Extinction et allumage de pc à distance
Posté : ven. 23 juil. 2010 20:29
par GELDROC
salut pour allumer mon serveur a distance la seul solution que jai trouver est de connecter mon pc au serveur a laid du port LPT (pour le control du port LPT et COM fait une recherche) brancher directement a sur les contact de la carte mere de mon serveur
Re: [..]Extinction et allumage de pc à distance
Posté : ven. 23 juil. 2010 21:00
par Jerome
J'avais entendu quelque chose il y a quelque temps comme un signal que l'on pouvait envoyer par le réseau à un poste éteint et qui l'allumait.
Présent sur Dell il me semble, mais j'en sait pas plus.
J'essayerai d'en savoir plus à mon boulot lundi avec un collègue.
Jérôme
Edit : Haha, j'ai trouver
ceci sur le forum anglais qui pourrait t'être utile

(code en première page.).
Re: [..]Extinction et allumage de pc à distance
Posté : ven. 23 juil. 2010 21:43
par Yogui
Première chose je n'ai pas tester mon code je n'ai pas le courage d'installer un mysql sur ma machine
donc premier jet totalement à l'aveugle mais je pense qu'il y a de l'idée

je n'ai pas du tout gérer le changement de flag ni le ping mais c'est faisable
► Afficher le texte
Code : Tout sélectionner
#include "mysql.au3"
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 272, 241, 192, 124)
$Button1 = GUICtrlCreateButton("Start all", 96, 104, 75, 25, $WS_GROUP)
$Button2 = GUICtrlCreateButton("Stop all", 96, 64, 75, 25, $WS_GROUP)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
$base =
$Utilisateur =
$password =
$IPserveur =
_MySQL_InitLibrary()
If @error Then Exit MsgBox(0, '', "")
$MysqlConn = _MySQL_Init()
$connected = _MySQL_Real_Connect($MysqlConn, $IPserveur, $Utilisateur, $password, $base)
If $connected = 0 Then
$errno = _MySQL_errno($MysqlConn)
MsgBox(0, "Error:", $errno & @LF & _MySQL_error($MysqlConn))
If $errno = $CR_UNKNOWN_HOST Then MsgBox(0, "Erreur:", "$CR_UNKNOWN_HOST" & @LF & $CR_UNKNOWN_HOST)
EndIf
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
$query = "select ip,adresse_mac,allumage from mabase where allumage = '1'"
$resultat = _query($query)
$lignemax = UBound($array) - 1
For $i = 1 To $lignemax
$IPAddress = "192.168.1.255"; Mettre le broadcast ici
$MACAddress = $resultat[$i][1]
UDPStartup()
$connexion = UDPOpen($IPAddress, 7)
$res = UDPSend($connexion, GenerateMagicPacket($MACAddress))
MsgBox(0, "", $res)
UDPCloseSocket($connexion)
UDPShutdown()
Next
Case $Button2
$query = "select ip,adresse_mac,extinction from mabase where extinction = '1'"
$resultat = _query($query)
$lignemax = UBound($array) - 1
For $i = 1 To $lignemax
Run(@ComSpec & ' /k ' & 'shutdown -m \\' & $resultat[$i][1] & ')
Next
EndSwitch
WEnd
; ===================================================================
; Functions
; ===================================================================
Func _query($query)
_MySQL_Real_Query($MysqlConn, $query)
$res = _MySQL_Store_Result($MysqlConn)
$fields = _MySQL_Num_Fields($res)
$rows = _MySQL_Num_Rows($res)
Dim $array[$rows][$fields]
For $k = 1 To $rows
$mysqlrow = _MySQL_Fetch_Row($res, $fields)
$lenthsStruct = _MySQL_Fetch_Lengths($res)
For $i = 1 To $fields
$length = DllStructGetData($lenthsStruct, 1, $i)
$fieldPtr = DllStructGetData($mysqlrow, 1, $i)
$data = DllStructGetData(DllStructCreate("char[" & $length & "]", $fieldPtr), 1)
$array[$k - 1][$i - 1] = $data
Next
Next
Return ($array)
EndFunc ;==>_query
; This function convert a MAC Address Byte (e.g. "1f") to a char
Func HexToChar($strHex)
Return Chr(Dec($strHex))
EndFunc ;==>HexToChar
; This function generate the "Magic Packet"
Func GenerateMagicPacket($strMACAddress)
$MagicPacket = ""
$MACData = ""
For $p = 1 To 11 Step 2
$MACData = $MACData & HexToChar(StringMid($strMACAddress, $p, 2))
Next
For $p = 1 To 6
$MagicPacket = HexToChar("ff") & $MagicPacket
Next
For $p = 1 To 16
$MagicPacket = $MagicPacket & $MACData
Next
Return $MagicPacket
EndFunc ;==>GenerateMagicPacket
Re: [..]Extinction et allumage de pc à distance
Posté : ven. 23 juil. 2010 22:07
par Tlem
@cyberhunter
Je suis très étonné que vous n'ayez trouvé aucun sujet traitant de vos demandes, car si dans la recherche je tape +wake +lan je trouve un sujet bien complet sur le Wake On Lan.
En ce qui concerne la base de donnée MySql, c'est pareil, le sujet ayant été traité plusieurs fois, je doute qu'une recherche efficace reste vaine ...

Re: [..]Extinction et allumage de pc à distance
Posté : mer. 28 juil. 2010 09:35
par cyberhunter
@Yogui
Merci pour ton script
mais j'ai une erreur lors de la compilation
Undertiminated string à la ligne
Code : Tout sélectionner
Run(@ComSpec & ' /k' & 'shutdown -m \\' & $resultat[$i][1] & ')
@Tlem
les sujets parlant du wake on lan parle de bases msaccess et sql server
ce qui ne m'intéresse pas
pour le mysql oui j'ai cherché mais pas assez je pense
Re: [..]Extinction et allumage de pc à distance
Posté : mer. 28 juil. 2010 11:24
par Yogui
cyberhunter a écrit :@Yogui
Merci pour ton script
mais j'ai une erreur lors de la compilation
Undertiminated string à la ligne
Code : Tout sélectionner
Run(@ComSpec & ' /k' & 'shutdown -m \\' & $resultat[$i][1] & ')
Compiler ce script alors que j'ai indiqué qu'il n'a pas été testé ...
J'ai écris cette ligne avec l'aide de shutdown:
Code : Tout sélectionner
Utilisation : shutdown [-i | -l | -s | -r | -a] [-f] [-m \\nom_ordinateur] [-t xx] [-c "commentaire"] [-d up:xx:yy]
Sans argument Affiche ce message (identique à -?)
-i Affiche l'interface graphique, doit être la 1ère option
-l Ferme la session (ne peut pas être utilisé avec l'option -m)
-s Met l'ordinateur hors tension
-r Met l'ordinateur hors tension et le redémarre
-a Annule une mise hors tension système
-m \\nom_ordinateur Ordinateur distant à mettre hors tension/redémarrer/annuler
-t xx Définir le délai d'expiration pour la mise hors tension à xx secondes
-c "commentaire" Commentaire de la mise hors tension (maximum de 127 caractères)
-f Force des applications en cours d'exécution à se fermer sans avertissement
-d [u][p]:xx:yy Le code de raison de la mise hors tension
u est le code utilisateur
p est un code de mise hors tension planifié
xx est le code de raison majeur (valeur entière inférieure à 256)
yy est le code de raison mineur (valeur entière positive inférieure à 65536)
Re: [..]Extinction et allumage de pc à distance
Posté : mer. 28 juil. 2010 11:29
par cyberhunter
euhhh
comment tu testes un script autoit sans le compiler ?
Re: [..]Extinction et allumage de pc à distance
Posté : mer. 28 juil. 2010 13:15
par SrBelial
Deux méthodes d'exécution d'un script sans passer par la compilation :
* ouvre ton script avec SciTE, puis appuie sur F5
* ou bien clic droit sur le fichier de ton script (extension .au3) et choisis "lance le script"
bien entendu si tu travaille sur des gros scripts tu te rendras très vite compte que la compilation n'intervient plus lors du développement mais uniquement lors du déploiement (en gros une fois que ton script marche et a été testé)
Si à chaque modif que tu fais au script il te faut recompiler, tu vas perdre pas mal de temps !
bon courage !
Re: [..]Extinction et allumage de pc à distance
Posté : mer. 28 juil. 2010 15:38
par cyberhunter
ok j'ai donc fait tester le script et j'ai exactement la même erreur que lors de la compilation Undertiminated string à la même ligne
Re: [..]Extinction et allumage de pc à distance
Posté : mer. 28 juil. 2010 16:50
par SrBelial
Il manque un guillemet à la fin de la chaine de caractères pour la terminer ...
Si tu ne l'as pas vu c'est sans doute que la coloration syntaxique n'est pas activée dans ton éditeur !
pour rappel : Dans SciTE : menu "Langage > AutoIT 3"
avec cette coloration les chaines de caractères apparaissent en gris.
Dans le cas de chaines complexes comme celle ci par exemple, il peut être plus pratique d'utiliser une syntaxe plus lisible !
Exemple :
Code : Tout sélectionner
Run(@ComSpec & _
' /k' & _
'shutdown -m \\' & _
$resultat[$i][1] & _
')'
De cette façon tu sais que si une de tes lignes commence par un guillemet (double ou simple), alors cette même ligne doit forcément se terminer par un guillemet identique (placé juste avant le "& _")
Re: [..] Extinction et allumage de pc à distance
Posté : jeu. 29 juil. 2010 11:39
par cyberhunter
Oki Merci ça marche mieux avec le quote à la fin de la ligne
par contre maintenant j'ai une erreur sur la ligne 20
Unknown function name
je ne l'ai pas trouvé dans le mysql.au3
elle se trouve ailleur ?
Merci
Re: [..] Extinction et allumage de pc à distance
Posté : jeu. 29 juil. 2010 15:04
par Yogui
il dois vous manquer la DLL : libmysql.dll
Re: [..] Extinction et allumage de pc à distance
Posté : jeu. 29 juil. 2010 16:36
par cyberhunter
elle est incluse avec l'installation du pilotes odbc ?
sinon je l'ai sous la main la dll
mais où la mettre ?
Re: [..] Extinction et allumage de pc à distance
Posté : ven. 30 juil. 2010 07:12
par Yogui
Dans le même répertoire que votre exe si il est compiler ou que vos sources.
Re: [..] Extinction et allumage de pc à distance
Posté : ven. 30 juil. 2010 10:26
par cyberhunter
j'ai testé mais ça n'a rien changé
une autre idée ?
merci
Re: [..] Extinction et allumage de pc à distance
Posté : ven. 30 juil. 2010 14:35
par ricky
Hello,
j'ai fait qqch sur un coin de table, mais c'est à toi de l'adapter. Chez moi, ça marche.
Je suis parti de deux fichiers, mais je ne sais plus ou je les ai trouvé, pas trouvé le topic, voici leurs nom :
MultiTCPServer.au3 &
BeispielClient.au3
Je les ai modifiés rapidement pour faire ce que tu veux, mais par contre, ça ne fait que l'éteindre.
Client :
► Afficher le texteclient
Code : Tout sélectionner
Global Const $IP = @IPAddress1
Global Const $PORT = 5393
TCPStartup()
$hCon = TCPConnect($IP,$PORT)
If @error Then Exit MsgBox(16,"","Serveur pas démarré. Erreur: "&@error)
TCPSend($hCon,"Je suis "&@ComputerName&" avec utilisateur "& @UserName)
While 1
$sRecv = TCPRecv($hCon,1024)
If @error Then ExitLoop
Select
Case $sRecv = "shutdown -r"
Run(@ComSpec & ' /k' & 'shutdown -r')
Case $sRecv = "shutdown -a"
Run(@ComSpec & ' /k' & 'shutdown -a')
Case $sRecv <> ""
MsgBox(0,"Client Incoming" & @IPAddress1,$sRecv)
EndSelect
Sleep(100)
WEnd
TCPShutdown()
Serveur :
► Afficher le texteserveur
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
Global Const $IP = @IPAddress1
Global Const $PORT = 5393
Global Const $MAXCON = 50;Maximal 50 Verbindungen
Global $aClients[$MAXCON + 1][3]
$aClients[0][0] = $MAXCON
Opt("GuiOnEventMode", 1)
TCPStartup()
$hListen = TCPListen($IP, $PORT, $MAXCON)
AdlibRegister("TCPAcc", 100)
;Hat nicht zu interessieren, ist nur GUI
GUICreate("Server", 400, 150)
GUISetOnEvent(-3, "_Exit")
$hListV = GUICtrlCreateListView("ID|Client|IP", 0, 0, 200, 150)
$hEdit = GUICtrlCreateEdit("Texte à envoyer", 200, 0, 200, 80,0)
$hSendToAll = GUICtrlCreateRadio("Envoyer à tous",200,80,200,15)
GUICtrlSetOnEvent(-1,"_gui_radio")
GUICtrlSetState(-1,$GUI_CHECKED)
GUICtrlCreateRadio("Que a cette IP:",200,95,200,15)
GUICtrlSetOnEvent(-1,"_gui_radio")
$hInput = GUICtrlCreateInput("",200,110,200,20)
GUICtrlSetState(-1,$GUI_DISABLE)
GUICtrlCreateButton("SEND", 200, 130, 200, 20)
GUICtrlSetOnEvent(-1, "_gui_send")
GUISetState()
;Main Schleife: Hier wird das, was in den Server reinkommt abgefangen
While 1
For $i = 1 To $aClients[0][0]
If $aClients[$i][0] Then
$sRecv = TCPRecv($aClients[$i][0], 1024)
If $sRecv Then TrayTip("Nouvelle connection " & $aClients[$i][1], $sRecv, 2)
EndIf
Next
Sleep(100)
WEnd
;GUI Krimskrams
Func _gui_radio()
ConsoleWrite(@GUI_CtrlId & @CRLF)
If @GUI_CtrlId = $hSendToAll Then
GUICtrlSetState($hInput,$GUI_DISABLE)
Else
GUICtrlSetState($hInput,$GUI_ENABLE)
EndIf
EndFunc
;GUI Krimskrams
Func _gui_send()
Local $sText = GUICtrlRead($hEdit)
If BitAND(GUICtrlRead($hSendToAll), $GUI_CHECKED) Then
ConsoleWrite("--" & @CRLF)
_TCP_ServerBroadcast($sText)
Else
Local $iID = GUICtrlRead($hInput)
ConsoleWrite($iID & @CRLF)
If $iID < 1 Or $iID > $MAXCON Then Return MsgBox(16,"","ID doit être entre 1 et "&$MAXCON&" !")
TCPSend($aClients[$iID][0],$sText)
If @error Then _DelClient($aClients[$iID][0])
EndIf
EndFunc ;==>_gui_send
;Adlib funktion, hier wird alle 100ms nach einem neuen Client gesucht
Func TCPAcc()
$hAcc = TCPAccept($hListen)
If $hAcc > 0 Then _AddClient($hAcc)
EndFunc ;==>TCPAcc
;Hier wird der Client hinzugefügt
Func _AddClient($hSocket)
Local $i
For $i = 1 To $aClients[0][0]
If Not $aClients[$i][0] Then ExitLoop
Next
$aClients[$i][0] = $hSocket
$aClients[$i][1] = SocketToIP($hSocket)
$aClients[$i][2] = GUICtrlCreateListViewItem($i&"|"&$aClients[$i][0] & "|" & $aClients[$i][1],$hListV)
Return TCPSend($hSocket, "welcome")
EndFunc ;==>_AddClient
;Hier wird er ggf. wieder gelöscht
Func _DelClient($hSocket)
Local $i
For $i = 1 To $aClients[0][0]
If $aClients[$i][0] = $hSocket Then
TCPCloseSocket($aClients[$i][0])
$aClients[$i][0] = '' ;Entferne Client
GUICtrlDelete($aClients[$i - 1][2])
Return True
EndIf
Next
Return False
EndFunc ;==>_DelClient
;Sendet einen String an alle verbundenen Clients
Func _TCP_ServerBroadcast($sText)
Local $i
For $i = 1 To $aClients[0][0]
If $aClients[$i][0] Then
TCPSend($aClients[$i][0], $sText)
If @error Then _DelClient($aClients[$i][0])
EndIf
Next
EndFunc ;==>_TCP_ServerBroadcast
Func _Exit()
Local $i
For $i = 1 To $aClients[0][0]
If $aClients[$i][0] Then
TCPCloseSocket($aClients[$i][0])
GUICtrlDelete($aClients[$i - 1][2])
EndIf
Next
TCPShutdown()
Exit
EndFunc ;==>_Exit
; Function to return IP Address from a connected socket.
;----------------------------------------------------------------------
Func SocketToIP($SHOCKET)
Local $sockaddr, $aRet
$sockaddr = DllStructCreate("short;ushort;uint;char[8]")
$aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $SHOCKET, _
"ptr", DllStructGetPtr($sockaddr), "int*", DllStructGetSize($sockaddr))
If Not @error And $aRet[0] = 0 Then
$aRet = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($sockaddr, 3))
If Not @error Then $aRet = $aRet[0]
Else
$aRet = 0
EndIf
$sockaddr = 0
Return $aRet
EndFunc ;==>SocketToIP
La partie serveur est le fichier original, j'ai juste traduit des champs.
Voilà, tu lances le serveur et ensuite sur ta machine client tu lances le client. Si tu écris du texte sur le serveur, dans le client il y aura une fenêtre avec ton texte, mais si tu écris
shutdown -r le client va s'éteindre au bout de 30s. et si tu envoies
shutdown -a, ça va arrêter cette commande d'extinction.
C'est qqch fait à la va vite, à toi de modifier ce que tu veux.