将 arp -g 的输出存储到 powershell 变量中
Posted
技术标签:
【中文标题】将 arp -g 的输出存储到 powershell 变量中【英文标题】:Store output from arp -g into powershell variable 【发布时间】: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
【问题讨论】:
【参考方案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-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
【讨论】:
对于带有 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
【讨论】:
以上是关于将 arp -g 的输出存储到 powershell 变量中的主要内容,如果未能解决你的问题,请参考以下文章
Powershell:捕获组合输出,仅错误输出,将组合输出发送到控制台
Powershell:将外部命令输出通过管道传输到另一个外部命令
将输出流以外的两个或多个 Powershell 流重定向到同一个文件