大致是这样的,经常要通过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
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
非常感谢您,我有小问题就是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
get-content d:\youfile.txt
FormatEntryData 是什么数据类型,怎么转为字符串呢
不明白你的上下文???
谢谢你们,已经解决了
arp -a $ip | Out-String
$arpInfo.Split(” “, [StringSplitOptions]::RemoveEmptyEntries)