![](/img/trans.png)
[英]PowerShell Script for Obtaining Specific System Info from Network Computers
[英]Powershell Network Device Info
我正在制作一个 Powershell CmdLet,一个功能是从网络设备获取信息
我只希望它输出设备主机名,以及设备是否具有连接性。
这是我当前的代码:
$devlist = arp -a
$devlength = $devlist.Length - 1
foreach($i in 3..$devlength){
$devlist[$i] = $devlist[$i].Substring(0,24) | ForEach-Object { $_ -replace ' ','' }
ping -n 1 -a $devlist[$i]
}
我希望输出格式是这样的:
设备主机名(如果收到)| 设备IP地址| 有连通性(是/否)
您可以尝试以下几行:
(arp -a | Select-Object -skip 10).Trim() -replace "(\s+){3}","," |
ConvertFrom-Csv |
ForEach-Object -Process `
{
[PSCustomObject]@{
IPAddress = $_.{Internet Address}
HostName = (Resolve-DnsName $_.{Internet Address} -ErrorAction SilentlyContinue).NameHost
Status = if(Test-Connection -ComputerName $_.{Internet Address} -Count 1 -Quiet) {'Online'} else {'Offline'}
}
}
我采用的方法是将整个返回值转换为一个对象,以使其更易于使用。
编辑:如果您想让其他用户可以访问它,您必须考虑他们的 Arp 表是如何设置的,以及有多少接口。 因此,试图猜测列标题的开始位置并不是最好的解决方案。 因此,您可以采取以下措施来解决这个问题:
((arp -a).Trim().Where{$_ -match "^\d+"}) -replace "\s+","," |
ConvertFrom-Csv -Header "IPAddress","MACAddress","Type" |
ForEach-Object -Process `
{
[PSCustomObject]@{
IPAddress = $_.IPAddress
HostName = (Resolve-DnsName $_.IPAddress -ErrorAction SilentlyContinue).NameHost
Status = if (Test-Connection -ComputerName $_.IPAddress -Count 1 -Quiet) {'Online'} else {'Offline'}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.