Я написал сценарий, который открывает и считывает данные, поступающие из последовательного порта:
$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