select-string在powershell中没有变量

时间:2017-05-01 18:44:05

标签: powershell syntax powershell-v2.0 powershell-v3.0

我已将MAC地址作为字符串存储在变量中:

$macaddress= "1234567"

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

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

如果在PowerShell中执行该命令,我看不到$macaddress的值。它在屏幕中显示为“$ macaddress”,而不是其值“1234567”。

请帮我正确设置$macaddress的值。

2 个答案:

答案 0 :(得分:1)

问题是如何定义变量$macaddress,但在中如何尝试捕获命令输出
删除封闭的{ ... };

$testing = arp -a | select-string $macaddress

至于您尝试的内容

{ ... }创建一个脚本块,这是稍后执行的一段源代码(松散地说)(例如,使用运算符{{1} }或.)。

如果您将脚本块传递给& - whose use you should generally avoid,顺便说一下,它会转换为字符串,字符串表示形式为文字Write-Host{之间的脚本块的内容 - 这就是您在输出中看到}出现(未展开)的原因。

$macaddress终止命令,只有在一行上放置多个命令时才需要。 管道仍被视为命令,即使它由多个子命令组成; not 尝试在管道中使用; - 你会破坏它(事实上,甚至你的脚本块创建命令也会破坏)。

答案 1 :(得分: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 }