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地址 |具有连接性(yes/no)
您可以尝试以下几行:
(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'}
}
}
我采用的方法是将整个返回值转换为 object 以使其更易于使用。
编辑:
如果您想让其他用户可以访问它,您必须考虑他们的 Arp Table 是如何设置的,以及有多少接口。因此,尝试猜测 headers 列的起始位置并不是最佳解决方案。因此,您可以采取以下措施来解决这个问题:
((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.
- 然后,添加您自己的 headers 将允许您将所有接口合并为一个 csv,我们可以将其转换为 objects。
我正在制作一个 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地址 |具有连接性(yes/no)
您可以尝试以下几行:
(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'}
}
}
我采用的方法是将整个返回值转换为 object 以使其更易于使用。
编辑: 如果您想让其他用户可以访问它,您必须考虑他们的 Arp Table 是如何设置的,以及有多少接口。因此,尝试猜测 headers 列的起始位置并不是最佳解决方案。因此,您可以采取以下措施来解决这个问题:
((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.
- 然后,添加您自己的 headers 将允许您将所有接口合并为一个 csv,我们可以将其转换为 objects。