この投稿 に続いて、cmd
のmode
コマンドを使用して、使用可能な/空きポートを確認できます。 PowerShell(PS)のワンライナーを使用することもできます。
_Get-WMIObject Win32_SerialPort | Select-Object DeviceID
_
既存のすべてのポートを表示します。違いは、開いている/ビジーポートを示します。
ここで、cmd
/PSの外部で開かれているポートを含め、何らかの方法で開いているポートを中断(強制終了)したいと思います。考えてください
$<PortName>.Close()
を使用してこれを行うことができます。cmd
またはPSコマンドである必要があります。P.S。私も質問を投稿しました ここRedditに
DevCon再起動:指定されたデバイスを停止して再起動します。ローカルコンピューターでのみ有効です。
例38:デバイスを再起動します
次のコマンドは、DevConの再起動操作を使用して、ローカルコンピューターのループバックアダプターを再起動します。このコマンドは、検索をNetセットアップクラスに制限し、そのクラス内で、ループバックアダプターのデバイスインスタンスID ROOT * MSLOOP\0000を指定します。 at文字(@)は、文字列をデバイスインスタンスIDとして識別します。リテラル検索を要求する一重引用符( ')は、DevConがID内のアスタリスクをワイルドカード文字として解釈するのを防ぎます。
devcon restart =net @'ROOT\*MSLOOP\0000
または、何が利用可能で、何に対してアクションを実行できるかを掘り下げます。
理解-シリアルポートからの情報の書き込みと読み取り
http://www.powertheshell.com/reference/wmireference/root/cimv2/Win32_SerialPorthttp://www.powertheshell.com/reference/wmireference/root/cimv2/Win32_SerialPort/リセットhttps://devblogs.Microsoft.com/powershell/writing-and-reading-info-from-serial-ports
(Get-WMIObject Win32_SerialPort).DeviceID
# COM3
Get-CimClass -ClassName Win32_SerialPort | Format-List -Force
...
CimClassMethods : {SetPowerState, Reset}
...
メソッド
Win32_SerialPortクラスにはこれらのメソッドがあります。
メソッドの説明
リセット実装されていません。このメソッドを実装するには、CIM_SerialControllerのResetメソッドを参照してください。
SetPowerState実装されていません。このメソッドを実装するには、CIM_SerialControllerのSetPowerStateメソッドを参照してください。
https://docs.Microsoft.com/en-us/windows/desktop/CIMWin32Prov/win32-serialport
Get-CimClass -ClassName CIM_LogicalDevice | Format-List -Force
Get-CimInstance -ClassName CIM_LogicalDevice |
Where-Object -Property DeviceID -EQ $((Get-WMIObject Win32_SerialPort).DeviceID) |
Select-Object -Property '*' | Get-Member
Get-CimInstance -ClassName CIM_LogicalDevice |
Where-Object -Property DeviceID -EQ $((Get-WMIObject Win32_SerialPort).DeviceID) |
Select-Object -Property TimeOfLastReset
# Writing to a Serial Port using .Net namespace accelerator
[System.IO.Ports.SerialPort]::getportnames()
COM3
$port = New-Object System.IO.Ports.SerialPort COM3,9600,None,8,one
$port.open()
$port.WriteLine(“Hello world”)
$port.Close()
# Reading from a Serial Port using .Net namespace accelerator
$port = New-Object System.IO.Ports.SerialPort COM3,9600,None,8,one
$port.Open()
$port.ReadLine()
\ Device\Serial n、ここでnは0から始まり、シリアルポートの内部デバイス名であり、閉じる必要があるのはこれらのハンドルです。
一行にはなりませんが...
SysInternalsツールから「handle」ユーティリティをダウンロードします。
管理者特権のコマンドプロンプトから、handle device\serial >temp.txt
を実行します
このファイルには、次の形式の行が多数含まれています。
image.exe pid: 24944 type: File 4C: \Device\Serialn
そのような行ごとに、(管理者として)実行します:handle -p <pid> -c <handleValue> -y
handle
出力の各行の最後の16進値(示されている例では4C)は、必要なハンドル値です。たとえば、次の方法でそのハンドルを閉じます。
handle -p 24944 -c 4c -y