【问题标题】:Store output from arp -g into powershell variable将 arp -g 的输出存储到 powershell 变量中
【发布时间】:2019-10-27 16:48:03
【问题描述】:

我只需要存储 MAC 地址信息(物理地址)

arp -g 10.205.128.115 
output: 
Interface: 10.205.128.101 --- 0xb
  Internet Address      Physical Address      Type
  10.205.128.115        48-2a-e3-28-b0-f5     dynamic  

我只需要 48-2a-e3-28-b0-f5

这是最接近我需要的,但我相信有最简单的方法:

$macarray = @()
arp -g 10.205.128.115 | Foreach{ 

        $obj = New-Object PSObject -Property @{
        #IP  = ($_ -split "\s+")[1]
        MAC = ($_ -split "\s+")[2]
        }
IF (!($obj.MAC -eq "---" -or $obj.MAC -eq "Address" -or $obj.MAC -eq $null -or $obj.MAC -eq "ff-ff-ff-ff-ff-ff")) {$macarray += $obj}
}
$macarray






$macarray = @()
arp -g 10.205.128.115 | Foreach{ 

        $obj = New-Object PSObject -Property @{
        #IP  = ($_ -split "\s+")[1]
        MAC = ($_ -split "\s+")[2]
        }
IF (!($obj.MAC -eq "---" -or $obj.MAC -eq "Address" -or $obj.MAC -eq $null -or $obj.MAC -eq "ff-ff-ff-ff-ff-ff")) {$macarray += $obj}
}
$macarray

【问题讨论】:

    标签: powershell variables arp


    【解决方案1】:

    这行得通!但我认为这个解决方案是“健壮的”

    $macarray = @()
    arp -g 10.205.128.115 | foreach {
    
        ($_ -split "\s+")[2]} | Where-Object -FilterScript { -Not ($_ -eq "---" -or $_ -eq "Address" -or $_ -eq $null -or $_ -eq "ff-ff-ff-ff-ff-ff")} 
    
    #foreach {$i.Add($_)} $i
    
    $macarray
    

    【讨论】:

    • 这是为了获取网络上计算机的 MAC 吗?如果是这样,您可以使用Get-CimInstance 获取您需要的信息。
    【解决方案2】:

    我认为你最好使用Get-CimInstanceGet-WmiObject 作为Lee_Daily 的建议,而不是尝试解析arp 命令的输出:

    Get-CimInstance -ClassName Win32_NetworkAdapterConfiguration | 
        Where-Object { $_.IPAddress -match '\S+' } | 
        Select-Object @{Name = 'Internet Address'; Expression = {$_.IPAddress[0]}}, 
                      @{Name = 'Physical Address'; Expression = {$_.MACAddress}}, 
                      @{Name = 'Type'; Expression = {if ($_.DHCPEnabled) {'dynamic'} else {'static'}}}, 
                      Description
    

    上面的输出会是这样的:

    Internet Address Physical Address  Type    Description                                                         
    ---------------- ----------------  ----    -----------                                                         
    192.168.0.14     00:24:1D:C7:38:64 dynamic Realtek RTL8168D/8111D Family PCI-E Gigabit Ethernet NIC (NDIS 6.20)
    192.168.56.1     0A:00:27:00:00:0F static  VirtualBox Host-Only Ethernet Adapter
    

    【讨论】:

    • 对于带有 LAPS 的远程 Win10 计算机是最简单的解决方案 ARP。不过谢谢
    【解决方案3】:
    • 您可以使用 RegEx 更好地解析 arp 输出,
    • Windows 8+ / Windows Server 2012+ 具有 Get-NetNeighbor cmdlet

    $IP = '10.205.128.115'
    
    # to parse arp output
    $MAC= (arp -g $IP | Select-String -Pattern '(([0-9a-f]){2}-){5}([0-9a-f]){2}').Matches.Value
    $MAC
    
    # a more owerShell like approach 
    $MAC = (Get-NetNeighbor $IP).LinkLayerAddress
    $Mac
    

    【讨论】:

      猜你喜欢
      • 2013-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      • 2018-01-27
      • 2023-02-13
      • 2011-10-08
      • 1970-01-01
      相关资源
      最近更新 更多