Supression port COM - Logiciels - Windows & Software
MarshPosté le 27-01-2016 à 14:34:41
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
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
Marsh Posté le 27-01-2016 à 14:34:41
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:
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 ):
Message édité par eagleenergy le 28-01-2016 à 08:08:16