我想制作一个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。
请伸出援助之手。如果没有解释,我也请求你没有答案,因为我不想复制而是要学习。
非常感谢!
答案 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给予我和洞察力!