我试图编写一个脚本来检测设备插入的COM端口,然后将其映射到新端口。
以下是"更改端口"的输出。命令:
PS C:\> change port
COM11 = \Device\19H2KP0
COM2 = \Device\Serial1
COM5 = \Device\Serial2
KEYSPAN#*USA19HMAP#00_00#{4d36e978-e325-11ce-bfc1-08002be10318} = \Device\ComUs19H-00
KEYSPAN#*USA19HMAP#00_00#{86e0d1e0-8089-11d0-9ce4-08003e301f73} = \Device\ComUs19H-00
USA19HP0 = \Device\19H2KP0
我需要在" \ Device \ 19H2KP0"之前捕获COM编号。因此,在此示例输出中,我将COM11捕获到变量中。
接下来我需要运行"更改端口"用该变量命令。即:
change port COM1=$CapturedText
提前感谢您的任何帮助!
答案 0 :(得分:1)
您是否已经知道19H2KP0
位是什么?如果是这样,您可以使用正则表达式使用预测来检测唯一ID。
以下是一个完整的示例,使用示例文本:
$Output = @"
COM11 = \Device\19H2KP0
COM2 = \Device\Serial1
COM5 = \Device\Serial2
KEYSPAN#*USA19HMAP#00_00#{4d36e978-e325-11ce-bfc1-08002be10318} = \Device\ComUs19H-00
KEYSPAN#*USA19HMAP#00_00#{86e0d1e0-8089-11d0-9ce4-08003e301f73} = \Device\ComUs19H-00
USA19HP0 = \Device\19H2KP0
"@
$Output -match "COM[0-9]{1,2}(?=.*$Id)";
Write-Host -Object ('COM port is: {0}' -f $matches[0]);
现在这是一个例子,使用内联命令:
$Id = '19H2KP0';
$Output = change port;
$Output -match "COM[0-9]{1,2}(?=.*$Id)";
Write-Host -Object ('COM port is: {0}' -f $matches[0]);
COM port is: COM11
答案 1 :(得分:0)
更长,但也许更直观,你也可以使用链式匹配和-replace运算符与更简单的正则表达式:
$CapturedText = (change port) -match 'COM.+19h2kp0' -replace '^(COM\d+).+','$1'
$CapturedText