繁体   English   中英

Powershell 网络设备信息

[英]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'}
            }       
        }
  • 返回 IP,您可以缩小将转换为csv的内容的选择范围。
  • 然后,添加您自己的标头将允许您将所有接口组合成一个我们可以转换为对象的csv

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM