将Test-Connection转换为Boolean

Glo*_*wie 9 powershell ping

我正在使用Powershell版本2,因此我无法使用Ping-Host,如此处所述 有没有办法将Ping-Host视为PowerShell中的布尔值?

我可以使用测试连接,即

Test-Connection *ip_address* -count 1
Run Code Online (Sandbox Code Playgroud)

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

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

我能ping的服务器输出"blah blah",好像我无法ping它.

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

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

最后它仍然输出"等等".

怎么修?

Sha*_*evy 22

试试-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
Run Code Online (Sandbox Code Playgroud)


Adi*_*bar 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"}
Run Code Online (Sandbox Code Playgroud)

要么

if (Test-Connection server -Count 1 | Out-Null) { write-host "blah" } else {write-host "blah blah"}
Run Code Online (Sandbox Code Playgroud)