Powershell читает данные из используемого последовательного порта - PullRequest
0 голосов
/ 14 июля 2020

Я написал сценарий, который открывает и считывает данные, поступающие из последовательного порта:

$port = New-Object SYstem.IO.Ports.SerialPort "COM5", 38400, None, 8, one

try {
    $port.Open()

    # Create a timer in order to limit how long the script tests for data
    $stopWatch = New-Object -TypeName System.Diagnostics.Stopwatch
    $timeSpan = New-TimeSpan -Seconds 10

    # Start the timer
    $stopWatch.Start()
    do {
        $line = $port.ReadLine()
        if ($line -ne $null) { $connected = $true; Write-Host $line }
    } while {$stopWatch.Elapsed -le $timeSpan)
} catch {
    Write-Host "Error testing connection: $PSItem"
} finally {
    if ($stopWatch -ne $null) {
        $stopWatch.Stop()
        $stopWatch.Reset()
    }
    $port.Close()
}

Скрипт отлично работает, когда запускается сам по себе.

У нас есть другая программа, которая должна работать в системе постоянно и занимает порт, который открывает этот сценарий. Поэтому всякий раз, когда эта программа открыта, этому сценарию отказывают в доступе к порту, потому что он используется.

Цель этого сценария - убедиться, что компьютер получает данные из этого порта. И, как я уже упоминал, эта другая программа должна быть запущена всегда.

Есть ли способ для сценария просматривать поток данных, пока другая программа открыта? Я не хочу останавливать другую программу, чтобы иметь возможность проверить. Все, что я нашел на этом топе c, ничего не говорит о просмотре используемого порта (я предполагаю, что это потому, что это очень необычно).

Изменить: я нашел скрипт на GitHub , который позволяет приостановить процесс с заданным идентификатором. Хотя пауза не идеальна для моей ситуации, я решил попробовать ее, чтобы проверить, работает ли она. Процесс действительно был приостановлен, но порт все еще использовался программой, поэтому нет go

...