我编写了一个脚本来获取单个端口上的端口信息。脚本管道&netstat -anob'然后使用Where-Object扫描对象以获取确切的端口号并吐出所需的信息。
不幸的是,我使用的唯一获得肯定结果的条件参数是-match。但它也会产生误报。
$netstatport = $netstat | Where-Object { $_ -match $port }
如果我搜索的端口是例如555,则找到该信息。但是如果$ port等于55,也会发现相同的信息。换句话说,我需要的是:
$ port = 55>>假
$ port = 555>>真
$ port = 5555>>假
我尝试过各种条件,例如-eq,-ieq,=等等。只有-match有效,但它太不精确了。
我错过了什么?
答案 0 :(得分:2)
您可以使用\b
匹配字边界:
$netstatport = $netstat | Where-Object { $_ -match "\b$port\b"}
这样,如果仅传递555
,则不会与5555
或55
匹配。
答案 1 :(得分:0)
-match
运营商支持
$port = 55
$regex= ":$port\s"
$netstat = Where-Object { $_ -match $regex}
打破正则表达式:
:
- 表示netstat输出中端口分隔符的字符$port
- 包含您指定的端口号的变量\s
- 端口号后面的单个空格请注意,此模式将返回与本地和外部IP地址/端口号匹配的值。
答案 2 :(得分:0)
您应该小心使用参数/用户输入并直接在正则表达式中使用它,因为任何特殊字符都将被解释,并且您无法预测哪些将出现。
因此,您应该使用[RegEx]::Escape()
$escPort = [RegEx]::Escape($port)
$netstat | Where-Object { $_ -match "\b$escPort\b" }
(这使用\b
,但如果您想使用更具体的内容(如其他答案),则原则相同。