IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Reset ou attribution automatique de port COM [PowerShell]


Sujet :

Scripts/Batch

  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2018
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2018
    Messages : 141
    Points : 73
    Points
    73
    Par défaut Reset ou attribution automatique de port COM
    Hello,

    Je suis pas tout à fait sûr d'être au bon endroit pour ça, désolé d'avance si c'est le cas.

    Alors...
    Mes utilisateurs disposent d'un PC portable et sont très volatiles. Ils peuvent se connecter sur à peu près n'importe quelle station d'accueil dans mon parc.
    Lorsqu'ils se connectent sur une station d'accueil, il y a un périphérique qui utilise un port COM spécifique car la configuration de ce périphérique nécessite d'utiliser un port COM en particulier.

    Le problème, c'est que lorsqu'un utilisateur se connecte sur la première station d'accueil, le périphérique sera configuré sur le bon port COM, mais dès qu'ils vont changer de station d'accueil, le périphérique n'aura plus le bon port COM car celui-ci sera déjà utilisé.

    Dans mon cas, j'ai besoin que le périphérique soit en permanence sur le port COM3.
    Il m'est possible de me connecter au poste de mon utilisateur et reconfigurer le port COM dans le gestionnaire de périphériques mais j'aimerais l'automatiser.

    Dans un premier temps, j'imaginais un script PowerShell pour effectuer cette tâche vu qu'un utilisateur peut passer d'une borne à une autre sans redémarrer le PC.
    J'idéalise complètement le truc, mais pour vulgariser ce serait un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If (peripherique.service = silabser){
        portCOM = COM3
    }
    J'ai récupéré quelques informations de mon périphérique, en PS, les voici :
    Name : Silicon Labs CP210x USB to UART Bridge (COM3)
    PNPDeviceID : USB\VID_10C4&PID_EA60\0808447779
    Service : silabser

    Je n'ai pas les bases en PowerShell et je ne sais pas imaginer si c'est possible ou non.
    Qu'en pensez-vous?
    Ou alors faudrait il passer par un autre moyen? Via le registre directement?

    Je vous remercie.

  2. #2
    Membre confirmé Avatar de licardentaistor
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2021
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2021
    Messages : 335
    Points : 482
    Points
    482
    Par défaut
    moi je le ferais dans l'autre sens, je ferais une requête wmic ou powershell ou regquery pour aller chercher le bon n° de COM

  3. #3
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2018
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2018
    Messages : 141
    Points : 73
    Points
    73
    Par défaut
    Euh, c'est-à-dire? :p

  4. #4
    Membre confirmé Avatar de licardentaistor
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2021
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2021
    Messages : 335
    Points : 482
    Points
    482
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WMIC.exe path  win32_pnpentity  where "PNPClass='Ports'" get  Caption,Service,Manufacturer

  5. #5
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2018
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2018
    Messages : 141
    Points : 73
    Points
    73
    Par défaut
    ça du coup c'est pour récupérer les infos du périphérique, pas pour attribuer un port COM spécifique à un périphérique spécifique

    Ou alors j'ai pas compris?

  6. #6
    Membre confirmé Avatar de licardentaistor
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2021
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2021
    Messages : 335
    Points : 482
    Points
    482
    Par défaut
    c'est forcément codé en dur en COM3 dans ton appli? l'idée c'était d'aller chercher le bon COM via des requêtes.

  7. #7
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2018
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2018
    Messages : 141
    Points : 73
    Points
    73
    Par défaut
    Ah oui je vois l'idée, j'avais pas compris effectivement

    En fait c'est pas tout à fait une appli, c'est un logiciel qui est lié au périphérique et dont la config se trouve dans un fichier .xml dans un paramètre comme ça :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <RS232Connection>
      <Port>3</Port>
      <baudrate>38400</baudrate>
    </RS232Connection>

    Ton idée serait de récupérer le port COM du périphérique et l'injecter dans la config.
    J'aime bien l'idée mais j'ai une GPO qui pousse la config avec le port COM3 sur tous mes postes. De plus, c'est possible de modifier le fichier de config au moment où on branche le périphérique?

  8. #8
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2018
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2018
    Messages : 141
    Points : 73
    Points
    73
    Par défaut
    Bon, même si je ne peux pas le faire de manière automatique, j'aimerais quand même me simplifier la tâche et celle de mes utilisateurs.

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #Recherche de l'objet
    $adaptateur = Get-WmiObject -Class Win32_SerialPort | Where-Object {$_.Name -like "*Silicon Labs CP210x USB to UART Bridge*"}
     
    #Récupérer la valeur du port COM
    $element = $adaptateur[0].DeviceID
     
    change port $element=COM3
     
    #Reset du périphérique
    #$adaptateur.Disable()
    #$adaptateur.Enable()

    J'arrive à quelque chose comme ça mais j'obtiens l'erreur :
    Impossible de cr‚er le mappage du port , code d'erreur = 0x2.
    Ensuite j'ai un second problème avec les méthodes pour reset le périphérique :
    Échec lors de l’appel de la méthode, car [System.Management.ManagementObject] ne contient pas de méthode nommée « Disable ».

  9. #9
    Membre actif
    Avatar de troxsa
    Inscrit en
    Novembre 2004
    Messages
    386
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Novembre 2004
    Messages : 386
    Points : 264
    Points
    264
    Par défaut
    Je ne vois pas de méthode Enable ou Disable dans win32-serialport

    Il y a que 2 méthodes


    Method Description
    Reset Not implemented. To implement this method, see the Reset method in CIM_SerialController.
    SetPowerState Not implemented. To implement this method, see the SetPowerState method in CIM_SerialController.

    Il est peut être possible de faire le reset avec "Invoke-WmiMethod" et d'utiliser le "Reset" ou SetPowerState

    Il sera peut être nécessaire de faire l'execution en administrateur

  10. #10
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2018
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2018
    Messages : 141
    Points : 73
    Points
    73
    Par défaut
    J'ai tenté plein plein de trucs, j'ai pas réussi à faire fonctionner le Invoke-WmiMethod.

    Soit il ne se passe rien, soit il me demande un nom de classe, j'ai pas trop trop compris du coup comment ça fonctionnait...


    Et également, je n'arrive toujours pas à changer le numéro de port depuis powershell :/

  11. #11
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2018
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2018
    Messages : 141
    Points : 73
    Points
    73
    Par défaut
    J'ai quelque chose comme ça...
    Mais j'obtiens une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    disable-PnpDevice : Échec générique 
    Au caractère Ligne:5 : 1
    + disable-PnpDevice -InstanceId $instanceID -confirm:$false
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (Win32_PnPEntity...7&1E2CD3D3&...):ROOT\cimv2\Win32_PnPEntity) [Disable-PnpDevice], CimException
        + FullyQualifiedErrorId : HRESULT 0x80041001,Disable-PnpDevice

    J'espère qu'il ne faut pas obligatoirement passer par le registre pour changer le numéro de port COM

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    #Recherche du périphérique
    #=========================
    $device = Get-WmiObject -Class Win32_SerialPort | Where-Object {$_.Name -like "*Silicon Labs CP210x USB to UART Bridge*"} #Récupération de l'objet
    $portCOM = $device.DeviceID #Récupérer la valeur du port COM
    #=========================
    #Recherche du périphérique
     
     
     
     
    #Changement du port COM
    #======================
     
     
    #======================
    #Changement du port COM
     
     
     
     
    #Reboot du périphérique
    #======================
    $instanceID = Get-PnpDevice -FriendlyName "*Silicon Labs CP210x USB to UART Bridge*" | select -ExpandProperty instanceId -first 1
     
    disable-PnpDevice -InstanceId $instanceID -confirm:$false
    enable-PnpDevice -InstanceId $instanceID -confirm:$false
    #======================
    #Reboot du périphérique

  12. #12
    Membre actif
    Avatar de troxsa
    Inscrit en
    Novembre 2004
    Messages
    386
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Novembre 2004
    Messages : 386
    Points : 264
    Points
    264
    Par défaut
    Bonjour,

    En regardant la doc je vois qu'il y a des differences sur l'utilisation

    https://learn.microsoft.com/en-us/po...sserver2022-ps

    Description
    The Disable-PnpDevice cmdlet disables a Plug and Play (PnP) device. You must use an Administrator account to disable a device.

    Example 1: Disable a device
    Disable-PnpDevice -InstanceId 'USB\VID_5986&;PID_0266&;MI_00\7&;1E5D3568&;0000'



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $Device = Get-PnpDevice | Where-Object {$_.Name -like "Realtek USB 3.0 Card Reader"}
    $IDDevice = $Device.InstanceId
    
    
    Disable-PnpDevice -InstanceId $IDDevice -Confirm:$false
    Faire une vérification que le status sur le périphérique soit OK, prendre le premier ne suffit pas

  13. #13
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2018
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2018
    Messages : 141
    Points : 73
    Points
    73
    Par défaut
    Ok, j'ai l'impression que cette partie là fonctionne et j'ai allégé le code :

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $device = Get-WmiObject -Class Win32_SerialPort | Where-Object {$_.Name -like "*Silicon Labs CP210x USB to UART Bridge*"} 
     
    #Changement du port COM
    #======================
    change port $device.DeviceID=COM3
     
    #Reboot du périphérique
    #======================
    disable-PnpDevice -InstanceId $device.PNPDeviceID -confirm:$false
    enable-PnpDevice -InstanceId $device.PNPDeviceID -confirm:$false

    Je dois le faire avec PNPDeviceID car IstanceId n'existe pas mais ce n'est qu'un détail et ça fonctionne.

    Reste plus qu'à trouver comment changer le port COM...

  14. #14
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2018
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2018
    Messages : 141
    Points : 73
    Points
    73
    Par défaut
    ça m'a l'air fonctionnel

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    $device = Get-WmiObject -Class Win32_SerialPort | Where-Object {$_.Name -like "*Silicon Labs CP210x USB to UART Bridge*"}
     
    if ($device) {
     
    #Changement du port COM
    #======================
    $deviceID = $device.PNPDeviceID
     
    $path = "HKLM:\SYSTEM\CurrentControlSet\Enum\$deviceID\Device Parameters"
    $pathFriendlyName = "HKLM:\SYSTEM\CurrentControlSet\Enum\$deviceID"
     
    Set-Itemproperty -path $path -Name 'PortName' -value 'COM3'
    Set-Itemproperty -path $pathFriendlyName -Name 'FriendlyName' -value 'Silicon Labs CP210x USB to UART Bridge (COM3)'
     
     
    #Reboot du périphérique
    #======================
    disable-PnpDevice -InstanceId $deviceID -confirm:$false
    enable-PnpDevice -InstanceId $deviceID -confirm:$false
     
    }

    Je déploie le script via GPO sur mon parc
    Du moins, c'est une GPO qui crée une tâche planifiée qui exécute le script au lancement de la session. Cette tâche est exécutée en "NT AUTHORITY\SYSTEM" ce qui permet d'exécuter le script avec les droits admin

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 21/06/2021, 16h54
  2. Réponses: 2
    Dernier message: 22/04/2019, 02h59
  3. RxTx, rafraichissement automatique de ports COM
    Par Olfox dans le forum Général Java
    Réponses: 2
    Dernier message: 09/10/2012, 14h24
  4. connecter et selectionner le port com automatiquement
    Par gastoncs dans le forum VB.NET
    Réponses: 3
    Dernier message: 10/07/2011, 15h40
  5. port com
    Par jeremi dans le forum C
    Réponses: 12
    Dernier message: 16/09/2002, 11h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo