Сохранить вывод из arp -g в переменную powershell - PullRequest
1 голос
/ 13 июня 2019

Мне нужно хранить только информацию о 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

Ответы [ 3 ]

0 голосов
/ 13 июня 2019

Я думаю, вам лучше использовать Get-CimInstance или Get-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
0 голосов
/ 13 июня 2019
  • Вы можете лучше проанализировать вывод arp с помощью RegEx,
  • Windows 8+ / Windows Server 2012+ имеют командлет Get-NetNeighbor

$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
0 голосов
/ 13 июня 2019

Это работает! Но я думаю, что это решение является "надежным"

$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
...