Public/Connect-StatUSBPort.ps1
function Connect-StatUSBPort { [CmdletBinding()] Param() if ($Global:SerialConnections) { Disconnect-StatUSBPort } $VendorInfo = @{ VID = '2047' PID = '03DF' } $TargetDeviceInfo = ("^USB\\VID_{0}&PID_{1}\\" -f $VendorInfo.VID, $VendorInfo.PID) #Get Com Ports $AllSerial = [System.IO.Ports.SerialPort]::getportnames() | Select-Object -Unique $RemoveNonUSBNonStatUSBSerial = Get-PnpDevice -FriendlyName '* (COM*' -Class 'Ports' | Where-Object {$_.DeviceID -notmatch '^BTHENUM' -and $_.DeviceID -match $TargetDeviceInfo } $FriendlyNames = ($RemoveNonUSBNonStatUSBSerial.FriendlyName) -join '|' $USBComPorts = $AllSerial | Where-Object {$FriendlyNames -match "\($_\)"} [System.IO.Ports.SerialPort[]]$Ports = $USBComPorts | ForEach-Object { [System.IO.Ports.SerialPort]::new($_, 9600, 'None', 8, 'one') } $Global:SerialConnections = ( $Ports | ForEach-Object { try { $_.Open() } catch {} if ($_.IsOpen) { $_ } } ) | Select-Object @{N = 'PortName'; E = {$_.PortName}}, @{N = 'UUID'; E = {$_.WriteLine('?'); start-sleep -Seconds 2; [void]$_.ReadLine(); $_.ReadExisting()}}, @{N = 'Port'; E = {$_}} } |