将特定文本从输出捕获到变量中

时间:2014-03-27 23:03:17

标签: powershell

我试图编写一个脚本来检测设备插入的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

提前感谢您的任何帮助!

2 个答案:

答案 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