我试图在Powershell命令下面解析获得mac地址列表。
getmac | findstr "Device" | select-string '(..-){5}' | ForEach-Object{$_ -replace '^(..-..-..-..-..-..).+$','$1'}
它给我的输出就像
7C-05-07-0F-F8-69
我想再添加一次检查,以检查它是否以特定范围开始,如下所示
getmac | findstr "Device" | findstr "7C:05:07" | findstr "08:00:27" | findstr "00:50:56" | select-string '(..-){5}' | ForEach-Object{$_ -replace '^(..-..-..-..-..-..).+$','$1'}
但是这个findstr "Device" | findstr "7C:05:07" | findstr "08:00:27" | findstr "00:50:56"
不工作或操作,我在下面也尝试过
getmac | (findstr "Device" -or findstr "7C:05:07" -or findstr "08:00:27" -or findstr "00:50:56")
它在powershell中出现错误--请帮助
发布于 2015-10-08 06:58:48
谢谢马特的详细答复。
我也找到了一个解决同样的问题,我想张贴我的答案。
我们可以在命令提示符和powershell吹风中使用来自findstr
的findstr
选项或操作。
getmac | findstr "Device" | findstr /c:"00-15-5D" /c:"08-00-27" /c:"00-50-56" /c:"52-54-00"| select-string '(..-){5}' | ForEach-Object{$_ -replace '^(..-..-..-..-..-..).+$','$1'}
有关findstr的更多信息,请参考此链接
发布于 2015-10-07 14:44:09
由于上一个示例中的表达式格式错误,您将得到一个错误。我想你所犯的错误是:Expressions are only allowed as the first element of a pipeline.
您不能以这样的方式使用-or
。运算符的每一侧都将被计算为布尔值。虽然我们可以使用子表达式来实现这一点,但您可能无法获得预期的结果。
总的来说,我建议仅仅用它来消除对findstr的所有需求
getmac | select-string "[-A-F0-9]{17}" -AllMatches | Select-Object -ExpandProperty Matches | Select-Object -ExpandProperty Value
然后我们就可以使用-or
从那里过滤
getmac | select-string "[-A-F0-9]{17}" -AllMatches |
Select-Object -ExpandProperty Matches |
Select-Object -ExpandProperty Value |
Where-Object{$_ -match "7C:05:07" -or $_ -match "08:00:27" -or $_ -match "00:50:56"}
我会用regex做一些更简洁的事情。
getmac | select-string "[-A-F0-9]{17}" -AllMatches |
Select-Object -ExpandProperty Matches |
Select-Object -ExpandProperty Value |
Where-Object{$_ -match "7C:05:07|08:00:27|00:50:56"}
如果这些必须在开头,则可以将最后一个正则表达式更改为以下内容:"^(7C:05:07|08:00:27|00:50:56)"
我还会考虑仅仅查询WMI来获取这些信息,而不是文本解析。
Get-WmiObject win32_networkadapter | Where-Object{$_.MacAddress} | Select -ExpandProperty macaddress
https://stackoverflow.com/questions/32994913
复制相似问题