当服务器被 ping 时,将结果地址与库存进行比较,以使库存保持最新。
我试图在下一个相应的单元格中将结果标记为“好”或“坏”。除了我设置的工作流程结果总是“糟糕”之外,它有点工作。
CSV 包含从 excel 清单中提取的服务器名称和 IP 地址,格式如下:
name,ipaddress
server1,10.1.24.51
server2,10.1.24.52
server3,10.1.24.53
server4,10.1.27.101
server5,10.1.27.102 <--- purposely wrong IP address for testing
当前脚本:
$serverlist = Import-Csv -Path file.csv
ForEach ($server in $serverlist) {
$thisservername = $server.name
$thisserveripaddress = $server.ipaddress
$pingdaddress = (Test-Connection -ComputerName $thisservername -Count 1 -ErrorAction SilentlyContinue -Verbose).IPV4Address.IPAddressToString
if ($pingdaddress -ne $thisserveripaddress) {
#$thisservername + " bad"
$serverlist | Select-Object name,ipaddress, @{Name='connection';Expression={'bad'}} | `
Export-Csv -Path file.csv -NoTypeInformation
} else {
#$thisservername + " good"
$serverlist | Select-Object name,ipaddress, @{Name='connection';Expression={'good'}} | `
Export-Csv -Path file.csv -NoTypeInformation
}
}
我认为您的错误源于
$pingdaddress = (Test-Connection -ComputerName $thisservername -Count 1 -ErrorAction SilentlyContinue -Verbose).IPV4Address.IPAddressToString
. 如果无法解析服务器名称,则返回的连接对象(嗯,Win32_PingStatus 对象)Test-Connection
将为$null
. 然后,您尝试访问空对象上的属性,这是不允许的。我会将“成功”部分分成自己的专栏。您可以通过在 CSV 中添加另一列来做到这一点,例如:
NameMatch
或IPMatch
,任何对您更有意义的内容。这样,您可以将其作为循环中的属性进行访问,$server.NameMatch
并稍后对数据进行过滤/排序。然后,如果您想稍后生成报告,您可以执行以下操作:
示例.csv:
首次运行脚本时,NameMatch 列可以为空(与 server2 一样),脚本将填充它。