在PowerShell中,select-string不能接受变量

3

我已经将MAC地址存储为字符串变量:

$macaddress= "1234567"

我正在尝试将命令的输出存储在另一个变量中:

 $testing = { arp -a; | select-string  $macaddress }
 Write-Host $testing

如果在PowerShell中执行此命令,我看不到$macaddress的值。它会显示为'$macaddress'而不是它的值"1234567"。
请帮我正确设置$macaddress的值。
2个回答

1
问题不在于您如何定义变量$macaddress,而在于您尝试捕获命令输出的方式。
移除大括号{ ... }和分号;即可。
$testing = arp -a | select-string $macaddress

关于您尝试的内容: { ... } 创建一个“脚本块”,它是一段源代码(宽泛地说)用于稍后执行(例如,使用运算符.&)。
如果您将脚本块传递给Write-Host - 顺便说一下,应该避免使用 - 它会被转换为字符串,并且字符串表示是脚本块中{}之间的字面内容 - 这就是为什么您在输出中看到了未展开的$macaddress

;用于终止一个命令,只有当你在一行中放置多个命令时才需要使用它。
管道仍然被视为一个单独的命令,即使它由多个子命令组成;不要尝试在管道中使用; - 这会导致其出错(事实上,甚至你创建脚本块的命令也会出错)。


0

尝试这种方式:

$macAddress = "00-01-02-03-04"
arp -a | Select-String $macAddress

如果您想提取与MAC地址相关的IP地址,可以这样做:
$macAddress = "00-01-02-03-04"
arp -a | Select-String ('\W*((?:[0-9]{1,3}\.){3}(?:[0-9]{1,3}))\W+(' +
  $macAddress + ')') | ForEach-Object { $_.Matches[0].Groups[1].Value }

选择字符串的外括号有什么作用?你使用了 select-string ('('+$var+'regex')) - Timo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接