10

我使用的是 Powershell 版本 2,因此我无法按照此处的说明使用 Ping-Host 有没有办法将 Ping-Host 视为 PowerShell 中的布尔值?

我可以使用测试连接,即

Test-Connection *ip_address* -count 1

我试图把它变成一个布尔值,但它不起作用

if ($(test-connection server -count 1).received -eq 1) { write-host "blah" } else {write-host "blah blah"}

我能够 ping 的服务器输出“blah blah”,就好像我无法 ping 它一样。

另一方面,如果我 ping 一个无法访问的服务器,我会收到错误消息

测试连接:测试与计算机服务器的连接失败:由于资源不足导致错误在行:1 char:22 + if ($(test-connection <<<< server -count 1).received -eq 1) { write-主机 "blah" } else {write-host "blah blah"} + CategoryInfo : ResourceUnavailable: ( server :String) [Test-Connection], PingException + FullyQualifiedErrorId : TestConnectionException,Microsoft.PowerShell.Commands.TestConnectionCommand

最后它仍然输出“blah blah”。

怎么修?

4

3 回答 3

26

试试-Quiet开关:

Test-Connection server -Count 1 -Quiet    

-Quiet [<SwitchParameter>]
    Suppresses all errors and returns $True if any pings succeeded and $False if all failed.

    Required?                    false
    Position?                    named
    Default value                False
    Accept pipeline input?       false
    Accept wildcard characters?  false
于 2013-07-30T18:56:28.557 回答
10

Received不是Test-Connection返回的对象的属性,因此$(test-connection server -count 1).received计算结果为 null。你想多了;只需使用if (Test-Connection -Count 1). 要抑制错误消息,请使用-ErrorAction SilentlyContinue,或将命令传递给Out-Null。以下任一方法都可以:

if (Test-Connection server -Count 1 -ErrorAction SilentlyContinue) { write-host "blah" } else {write-host "blah blah"}

或者

if (Test-Connection server -Count 1 | Out-Null) { write-host "blah" } else {write-host "blah blah"}
于 2013-07-30T17:46:07.207 回答
0

我们在生产中使用的一种更好的衬垫

function test_connection_ipv4($ipv4) { if (test-connection $ipv4 -Count 1 -ErrorAction SilentlyContinue ) {$true} else {$false} }

使用示例1:

test_connection_ipv4 10.xx.xxx.50
True

使用示例2:

test_connection_ipv4 10.xx.xxx.51
False
于 2018-02-14T14:01:30.437 回答