arp只想输出物理地址然后成为变量,在Get-VMNetworkAdapter在进行搜索该物理地址的主机名是什么


PowerShell交流中心分类: Powershell基础arp只想输出物理地址然后成为变量,在Get-VMNetworkAdapter在进行搜索该物理地址的主机名是什么
0
kuangrenxing asked 6 年 ago

大致是这样的,经常要通过IP地址,得到的物理地址,然后查主机名,想着能不能简单一点,

能不能通过arp得到物理地址成为变量,然后去找Get-VMNetworkAdapter中主机名.一步可以解决呢

谢谢了

第一步:
arp -a 192.168.14.99
结果:
接口: 192.168.14.254 — 0x14
Internet 地址          物理地址                   类型
192.168.14.10       00-15-5d-3b-1f-5a     动态

第二步:到得00-15-5d-3b-1f-5a我每次都是手动去掉中间的”-“杠,去找主机名
Get-VMNetworkAdapter -all | Where-object {$_.macaddress.Contains((“00155d3b1f6b”).ToUpper())} | Select VMname,MacAddress
结果:
VMName           MacAddress
——                   ———-
viva4                 00155D3B1F6B

1 Answers
0
Mooser Lee 管理员 answered 6 年 ago
function Get-ArpMacAddress
{
    param([string]$Ip)
    $arpResult = @(
    "接口: 192.168.14.254 — 0x14",
    "Internet 地址          物理地址                   类型",
    "192.168.14.10       00-15-5d-3b-1f-5a     动态"
    )
    # 本地没有ARP环境,你可以用下一行语句代替,上一行是我的mock结果,可删掉
    # $arpResult = arp -a $Ip

    $arpResult | foreach { 
        $tokens = $_.split(' ',[StringSplitOptions]::RemoveEmptyEntries)
        if(($tokens.Count -ge 3) -and ($tokens[0] -eq $Ip) ){
         $tokens[1].Replace('-','').ToUpper()
        }
    } | 
    select -First 1
}


Get-ArpMacAddress -Ip 192.168.14.10
kuangrenxing replied 6 年 ago

非常感谢您,我有小问题就是arp -a 192.168.14.10得到的不是一个数组,我现在都是保存为文件,然后读取.怎么能转为数组呢

我昨晚上也熬夜做出来,凑合用

function VMnameQuery
{
param(
[Parameter(Mandatory=$true)]$ip
)
write-host ‘你输入的内网IP:’$ip

$arpFile = ‘c:\arp.txt’
arp -a $ip | Format-Table | Out-File $arpFile
get-content $arpFile
$macRow= (Get-Content $arpFile -TotalCount 4)[-1]
$macRowArr = $macRow.Split(” “, [StringSplitOptions]::RemoveEmptyEntries)
$mac = ”
$macRowArr[1].Split(“-“) | foreach{
$mac+=$_
}
Get-VMNetworkAdapter -all | Where-object {$_.macaddress.Contains($mac.ToUpper())} | Select VMname,MacAddress
}
VMnameQuery
pause

Mooser Lee 管理员 replied 6 年 ago

get-content d:\youfile.txt

kuangrenxing replied 6 年 ago

FormatEntryData 是什么数据类型,怎么转为字符串呢

Mooser Lee 管理员 replied 6 年 ago

不明白你的上下文???

kuangrenxing replied 6 年 ago

谢谢你们,已经解决了
arp -a $ip | Out-String
$arpInfo.Split(” “, [StringSplitOptions]::RemoveEmptyEntries)