eagleenergy | Bonjour à tous,
Voilà j'ai pas mal galérer à trouver alors je poste pour peut être pouvoir en aider d'autres.
Problème initial :
La où je travail, des collègues font des tests sur les carte Arduino.
A chaque fois que l'on connecte un Arduino ou autre périphérique pouvant réaliser la même opération (j'ai vu des problème avec des périphériques bluetooth par exemple) windows lui attribut un port COM.
Cependant plus on branche de périphériques différent plus le numéro du port attribué est grand exemple on peut ce retrouver avec quelque chose du style: Arduino UNO R3 COM24
Hors certain logiciel ne reconnaisse que jusqu'au port COM9
Si il ne s'agissait de gérer qu'un seul ordinateur la solution est simple : http://www.thewindowsclub.com/show [...] es-windows
Dans mon cas il s'agit de régler se problème régulièrement sur 15 postes.
Il a donc fallut mettre en place un script.
Solution:
En se promenant un peu sur google on parle d'un outils devcon.exe utilisé pour manager les périphériques.
j'ai donc télécharger le fameux devcon.exe
Puis dans le même dossier que ce dernier j'ai créer un petit script .bat que voici:
Code :
- @ECHO OFF
- DEVCON Find * | FINDSTR /R "COM[0-9]"> "DevicesExist.txt"
- FOR /F "tokens=1 delims=: " %%A IN ('DEVCON FindAll * ^| FINDSTR /R "COM[0-9]"') DO (
- TYPE "DevicesExist.txt" | FIND "%%~A" >NUL
- IF ERRORLEVEL 1 %Debug% DEVCON remove "@%%~A"
- )
|
permettant donc de supprimer tout les périphériques attribués a des port COMx et qui ne sont pas actuellement présent sur l'ordinateur (afin d'éviter de supprimer ce qui est encore utile
J'ai aussi fait la version .vbs (attention ça pique les yeux, pas dutout aboutie en therme d'optimisation mais ça fonctionne ):
Code :
- strSourceDevcon = "devcon.exe"
- device = 0
- count = 1
- Set objFSO = CreateObject("Scripting.FileSystemObject" )
- Set WshShell = CreateObject("WScript.Shell" )
- Const ForReading = 1, ForWriting = 2
- Const TwoSeconds = 2000
- Set pcd = objFSO.OpenTextFile("presentcomdevice.txt", ForWriting,true)
- Set acd = objFSO.OpenTextFile("allcomdevice.txt", ForWriting,true)
- Set del = objFSO.OpenTextFile("deldevice.txt", ForWriting,true)
- Set loggs = objFSO.OpenTextFile("loggs.txt", ForWriting,true)
- strTempFile1 = objFSO.GetTempName
- aux = "cmd.exe /c devcon find * >" & strTempFile1
- WshShell.Run aux, 0
- Wscript.Sleep TwoSeconds
- Set objTextFile = objFSO.OpenTextFile(strTempFile1, ForReading)
- ' chercher les peripherique COM presents
- Do Until objTextFile.AtEndOfStream
- strNextLine = objTextFile.Readline
- set objRE = New RegExp
- With objRE
- .Pattern = "COM[0-9]"
- .IgnoreCase = False
- .Global = False
- End With
- If objRE.Test( strNextLine ) Then
- strComDevice = strNextline
- device = device + 1
- pcd.writeline(strComDevice)
- count = count + 1
- End If
- Set objRE = Nothing
- Loop
- objTextFile.Close
- ' affichage des stats
- wscript.echo (device & " PRESENT COM device(s) find" )
- Wscript.Sleep TwoSeconds
- device = 0
- count = 1
- strTempFile2 = objFSO.GetTempName
- aux = "cmd.exe /c devcon findall * >" & strTempFile2
- WshShell.Run aux, 0
- Wscript.Sleep TwoSeconds
- Set objTextFile = objFSO.OpenTextFile(strTempFile2, ForReading)
- ' chercher tout les peripheriques COM
- Do Until objTextFile.AtEndOfStream
- strNextLine = objTextFile.Readline
- set objRE = New RegExp
- With objRE
- .Pattern = "COM[0-9]"
- .IgnoreCase = False
- .Global = False
- End With
- If objRE.Test( strNextLine ) Then
- strComDevice = strNextline
- device = device + 1
- acd.writeline(strComDevice)
- count = count + 1
- End If
- Set objRE = Nothing
- Loop
- objTextFile.Close
- wscript.echo (device & " COM device(s) find in ALL" )
- Wscript.Sleep TwoSeconds
- device = 0
- pass = 0
- Set objTextFile1 = objFSO.OpenTextFile("allcomdevice.txt", ForReading)
- ' supprimer les peripherique COM caches
- Do Until objTextFile1.AtEndOfStream
- strLine1 = objTextFile1.Readline
- Set objTextFile2 = objFSO.OpenTextFile("presentcomdevice.txt", ForReading)
- Do Until pass = 1 or objTextFile2.AtEndOfStream
- strLine2 = objTextFile2.Readline
- TestComp = StrComp(strLine1, strLine2, Text)
- IF TestComp = 0 Then
- pass = 1
- loggs.writeline(strLine1 & "pass" )
- End If
- Loop
- objTextFile2.Close
- IF pass <> 1 Then
- del.writeline (strLine1)
- device = device + 1
- arrAux = split(strLine1, ":" )
- remove = arrAux(0)
- Set arrAux = Nothing
- aux = "cmd.exe /c devcon remove @" & remove
- wscript.echo ("Removing @" & remove)
- WshShell.Run aux, 0
- Wscript.Sleep TwoSeconds
- End If
- pass = 0
- Loop
- objTextFile1.Close
- wscript.echo (device & " COM device(s) deleted" )
|
Message édité par eagleenergy le 28-01-2016 à 08:08:16
|