【问题标题】:select-string not taking variable in powershell选择字符串在powershell中不接受变量
【发布时间】:2017-05-01 18:44:05
【问题描述】:

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

$macaddress= "1234567"

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

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

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

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

【问题讨论】:

    标签: powershell syntax powershell-2.0 powershell-3.0


    【解决方案1】:

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

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

    至于你尝试了什么

    { ... } 创建一个脚本块,这是一段源代码(粗略地说)供稍后执行(例如,使用运算符. 或@987654328 @)。

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

    ; 终止一个命令,并且只有在您将 多个 命令放在一行时才需要。
    一个管道仍然被认为是一个单个命令,即使它是由多个子命令组成的; 不要尝试在管道中使用; - 你会破坏它(事实上,甚至你的脚本块创建命令也会破坏)。

    【讨论】:

      【解决方案2】:

      试试这个方法:

      $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 的外括号是干什么用的?你做了select-string ('('+$var+'regex'))
      猜你喜欢
      • 1970-01-01
      • 2015-07-02
      • 2015-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-13
      • 2019-12-20
      • 1970-01-01
      相关资源
      最近更新 更多