使布尔数组脱离连接状态

时间:2015-07-06 16:13:49

标签: .net powershell networking

我想制作一个powershell脚本,它将返回有关连接到网络的每台计算机的一些信息(主机名,操作系统,SP)。

目前我尝试选择使用的IP地址并将其存储在一个数组中供以后使用。

我的问题是我尝试获取连接的状态(成功/超时/主机无法访问)以及是否成功通过if语句将其添加到数组中。

$computerAddress = (1..254)

[System.Collections.ArrayList]$workingComputers = @()

$ping = New-Object System.Net.Networkinformation.Ping

[string]$result=""

foreach($computer in $computerAdress){
    $result = $ping.Send("10.0.0.$computer") | select status
    $result -eq "Status=Success"
}

问题在于$ result -eq" Status = Success",它总是返回false,即使它是成功的ping。

请伸出援助之手。如果没有解释,我也请求你没有答案,因为我不想复制而是要学习。

非常感谢!

2 个答案:

答案 0 :(得分:2)

这就是问题!

您将$ping.Send()的结果存储在$result内,只选择.Status属性。

这意味着您的$result对象如下所示:

>$result

Status
------
Success

然后,您要求PowerShell将此与“#34;状态=成功"”进行比较。角色不完全匹配,这就是-eq / equals建立的结果。

现在,如果您想直接比较Status属性以查看它是否成功,您可以通过键入$Result.Status来执行此操作,以便只选择一个属性,扔掉列标题。然后你可以扔掉"状态="比较的一部分,不需要它。

这就是比较应该是什么样的。

$result.Status -eq "Success"
True

如果您想进一步澄清,请告知我们:)

答案 1 :(得分:0)

因为FoxDeploy说我是如何将Status字段从Ping对象中取出来的。

我发现的方式是:

$ping.Send("10.0.0.$computer") | select status | %{$_.Status -eq "Success"} 

基本上我通过第二个管道传递对象(" |")然后我只选择状态字段(非常类似于Java):))

再次感谢FoxDeploy给予我和洞察力!