Hardware verwijderen via PowerShell

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Zilverdael80
  • Registratie: December 2006
  • Laatst online: 21-09 16:15
Ik heb een systeem waarmee ik via een seriele poort veel verschillende hardware test.
Deze poort wordt door Windows toegewezen wanneer de hardware wordt aangesloten, dit werkt prima.
Nadeel; elk nieuw apparaat krijgt een nieuwe (oplopend) COM poort nummer toegewezen.
Wanneer het aantal poorten boven de 9 komt kan ik ze niet meer gebruiken omdat het programma wat ik gebruik (Porcomm) dit niet ondersteund.
Er worden telkens maar 1 a 2 devices tegelijk getest.
De oplossing is om de 'niet gebruikte' COM poorten telkens te wissen in apparaatbeheer.
Dit werkt prima, maar is niet noob-friendly en omslachtig.

Ik dacht om dit via PowerShell te doen, wanneer een COM poort disconnect komt deze als 'unknown'
code:
1
2
3
4
5
6
7
8
PS C:\WINDOWS\system32> Get-PnpDevice -class Ports | Select FriendlyName,Status,InstanceId

FriendlyName                            Status  InstanceId
------------                            ------  ----------
ECP Printer Port (LPT1)                 OK      ACPI\PNP0401\5
Prolific USB-to-Serial Comm Port (COM6) OK      USB\VID_067B&PID_2303\7&239B083F&0&4
USB Serial Port (COM8)                  OK      FTDIBUS\VID_0403+PID_6015+DN05RTLQA\0000
USB Serial Port (COM9)                  Unknown FTDIBUS\VID_0403+PID_6015+DN05D2Y4A\0000


So far so good, het te verwijderen apparaat is gevonden. (COM9, deze heeft status Unknown)

Nu kwam ik deze tip tegen:
https://stackoverflow.com...-present-network-adapters

Dit heb ik omgebouwd naar 'mijn' situatie en dit werkt voor een deel.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
PS C:\WINDOWS\system32> $Devs = Get-PnpDevice -class Ports | ? Status -eq Unknown | Select FriendlyName,InstanceId
>>
>> ForEach ($Dev in $Devs) {
>>     Write-Host "Removing $($Dev.FriendlyName)" -ForegroundColor Cyan
>>     $RemoveKey = "HKLM:\SYSTEM\CurrentControlSet\Enum\$($Dev.InstanceId)"
>>     Get-Item $RemoveKey | Select-Object -ExpandProperty Property | %{ Remove-ItemProperty -Path $RemoveKey -Name $_ -Verbose }
>> }
>> Write-Host "Done.  Please restart!" -ForegroundColor Green
Removing USB Serial Port (COM9)
VERBOSE: Performing the operation "Remove Property" on target "Item: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FTDIBUS\VID_0403+PID_6015+DN05D2Y4A\0000 Property: DeviceDesc".
VERBOSE: Performing the operation "Remove Property" on target "Item: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FTDIBUS\VID_0403+PID_6015+DN05D2Y4A\0000 Property: Capabilities".
VERBOSE: Performing the operation "Remove Property" on target "Item: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FTDIBUS\VID_0403+PID_6015+DN05D2Y4A\0000 Property: Address".
VERBOSE: Performing the operation "Remove Property" on target "Item: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FTDIBUS\VID_0403+PID_6015+DN05D2Y4A\0000 Property: ContainerID".
VERBOSE: Performing the operation "Remove Property" on target "Item: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FTDIBUS\VID_0403+PID_6015+DN05D2Y4A\0000 Property: HardwareID".
VERBOSE: Performing the operation "Remove Property" on target "Item: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FTDIBUS\VID_0403+PID_6015+DN05D2Y4A\0000 Property: ConfigFlags".
VERBOSE: Performing the operation "Remove Property" on target "Item: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FTDIBUS\VID_0403+PID_6015+DN05D2Y4A\0000 Property: ClassGUID".
VERBOSE: Performing the operation "Remove Property" on target "Item: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FTDIBUS\VID_0403+PID_6015+DN05D2Y4A\0000 Property: Driver".
VERBOSE: Performing the operation "Remove Property" on target "Item: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FTDIBUS\VID_0403+PID_6015+DN05D2Y4A\0000 Property: UpperFilters".
VERBOSE: Performing the operation "Remove Property" on target "Item: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FTDIBUS\VID_0403+PID_6015+DN05D2Y4A\0000 Property: Mfg".
VERBOSE: Performing the operation "Remove Property" on target "Item: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FTDIBUS\VID_0403+PID_6015+DN05D2Y4A\0000 Property: Service".
VERBOSE: Performing the operation "Remove Property" on target "Item: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FTDIBUS\VID_0403+PID_6015+DN05D2Y4A\0000 Property: FriendlyName".
Done.  Please restart!
PS C:\WINDOWS\system32>

Hij verwijdert alleen de properties en niet de key zelf (wat remove hardware in de device manager gui WEL doet)
Wanneer ik de key probeer te verwijderen krijg ik geen toegang, ook niet via regedit (zowel gewoon als administrator geprobeert).
Ik krijg nu een 'leeg' apparaat in PowerShell en in apparaatbeheer een 'unknown device'
code:
1
2
3
4
5
6
7
8
PS C:\WINDOWS\system32> Get-PnpDevice -class Ports | Select FriendlyName,Status,InstanceId

FriendlyName                            Status  InstanceId
------------                            ------  ----------
ECP Printer Port (LPT1)                 OK      ACPI\PNP0401\5
Prolific USB-to-Serial Comm Port (COM6) OK      USB\VID_067B&PID_2303\7&239B083F&0&4
USB Serial Port (COM8)                  OK      FTDIBUS\VID_0403+PID_6015+DN05RTLQA\0000
                                        Unknown FTDIBUS\VID_0403+PID_6015+DN05D2Y4A\0000


Mijn vraagstelling is nu; hoe krijg ik deze keys weg zodat de COM poort weer wordt vrijgegeven om door nieuwe apparaten te bezetten?

Alle reacties


Acties:
  • 0 Henk 'm!

  • SambalBij
  • Registratie: September 2000
  • Laatst online: 11:00

SambalBij

We're all MAD here

Nu verwijder je zo te zien niet het device uit de device manager, maar alleen de registry keys.
Kun je, na het middels powershell identificeren van het te verwijderen device, deze niet 'echt' verwijderen middels iets van devcon? (https://docs.microsoft.co...ers/devtest/devcon-remove)

In dit voorbeeld dan dus met een 'devcon remove @FTDIBUS\VID_0403+PID_6015+DN05D2Y4A\0000'

[ Voor 13% gewijzigd door SambalBij op 11-02-2020 16:22 ]

Sometimes you just have to sit back, relax, and let the train wreck itself


Acties:
  • 0 Henk 'm!

  • Zilverdael80
  • Registratie: December 2006
  • Laatst online: 21-09 16:15
Devcon vereist nogal wat extra software installatie. Daar dit project mogelijk op meer locaties gebruikt gaat worden, is extra software niet heel erg gewenst.

Ondertussen heb ik zelf deze gevonden:
https://theorypc.ca/2017/...natively-with-powershell/
Die verwijdert de hardware goed uit het systeem... Maar geeft de COM poort niet 'vrij' om hergebruikt te worden ... Het optellen gaat dus door.

Acties:
  • 0 Henk 'm!

  • SambalBij
  • Registratie: September 2000
  • Laatst online: 11:00

SambalBij

We're all MAD here

Check daarvoor eens HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\COM Name Arbiter\Devices

Waarschijnlijk blijven daar de devices nog staan met hun eerder toegewezen COM poort nummer.
(Info komt van https://plugable.com/2011...ial-adapter-on-windows-7/ / http://www.bisque.com/sc/forums/p/446/430.aspx)

Sometimes you just have to sit back, relax, and let the train wreck itself


Acties:
  • 0 Henk 'm!

  • Zilverdael80
  • Registratie: December 2006
  • Laatst online: 21-09 16:15
SambalBij schreef op dinsdag 11 februari 2020 @ 16:29:
Check daarvoor eens HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\COM Name Arbiter\Devices
[...]
Daar weggehaald (even handmatig bij wijze van test), maar hij blijft vrolijk doortellen helaas.

Heb inmiddels devcon gevonden in een portable versie, dus zal daar ook eens mee aan de slag gaan, wellicht dat dat makkelijker gaat... een losse executable is geen ramp om te gebruiken, beter dan een pakket van een paar 100 MB

edit:
Devon kan de deviced ook niet weghalen :(

[ Voor 5% gewijzigd door Zilverdael80 op 11-02-2020 16:46 ]


Acties:
  • 0 Henk 'm!

  • Mel33
  • Registratie: Oktober 2009
  • Laatst online: 20-09 17:32
Kan je niet virtuele com poorten maken, die zal dan wel niet optellen/

Ik ben zo blij dat de pen en de som nog steeds machtiger zijn dan het zwaard. ringo-remasterd


Acties:
  • 0 Henk 'm!

  • SambalBij
  • Registratie: September 2000
  • Laatst online: 11:00

SambalBij

We're all MAD here

Hij lijkt ook nog iets met die ComDB REG_BINARY een niveau hoger te doen; dat is blijkbaar een mask welke poorten reeds in gebruik zijn.
In mijn geval zijn COM3 en COM4 toegewezen.
Die ComDB heeft nu waarde 0c 00 00 00 etc
(0c komt overeen met 00001100; mogelijk dus een 1 op de plek van toegewezen poorten? Bijvoorbeeld com1, 3 en 5 toegewezen zou dan 00010101 kunnen zijn, wat neer komt op een eerste byte van hex 15)

Edit:
Dat mask lijkt het inderdaad heel veel op: Wanneer ik een van mijn COM devices van COM4 naar COM5 omzet; dan wordt de mask 00010100 = hex 14 (Ik heb dan poorten 3 en 5 toegewezen)

[ Voor 18% gewijzigd door SambalBij op 11-02-2020 16:49 ]

Sometimes you just have to sit back, relax, and let the train wreck itself


Acties:
  • 0 Henk 'm!

  • Zilverdael80
  • Registratie: December 2006
  • Laatst online: 21-09 16:15
Dat lijkt inderdaad te kloppen, als ik een nieuw apparaat aansluit (COM 17) kom ik uit op FC FF 01 00 00 00

Ik ben nu thuis en kom op FC000000
Ik heb com 3,4,5,6 en 8 in de data staan ... FC = 11111100 Dus dat komt dan helaas weer niet overeen met de theorie.

Maar ik denk dat ik een snapshot van het 'schone' systeem kan maken en die waarde terugplaats na het opschonen van de losgekoppelde hardware ... Zou in theorie best wel eens kunnen werken .. Morgen in de praktijk proberen :)

Tot dusver dank voor het meedenken, to be continued.

[ Voor 242% gewijzigd door Zilverdael80 op 11-02-2020 17:33 ]

Pagina: 1