2013-07-30 4 views
8

Ich verwende Powershell Version 2, also bin ich nicht in der Lage Ping-Host zu verwenden, wie hier erklärt Is there a way to treat Ping-Host as a boolean in PowerShell?Convert Test-Connection in Boolesche

I Testverbindung nutzen können, dh

Test-Connection *ip_address* -count 1 

Ich bin versucht, dies in einen boolean zu machen, aber es funktioniert nicht

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

Der Server ich in der Lage bin Ausgänge „bla bla“ ping, als ob ich nicht in der Lage bin, es zu pingen.

Auf der anderen Seite, wenn ich einen nicht erreichbaren Server ping, erhalte ich Fehlermeldung

Test-Connection: Testen Verbindung zum Computer Server fehlgeschlagen: Fehler wegen des Mangels an Ressourcen Bei Zeile: 1 char: 22 + if ($ (Test-Verbindung < < < < Server -count 1) .received -eq 1) {write-host "blah"} else {write-host "bla bla"} + CategoryInfo : ResourceUnavailable: (Server: String) [Test-Verbindung], PingException + FullyQualifiedErrorId: TestConnectionException, Microsoft.PowerShell.Commands.TestConnectionCommand

Und am Ende noch gibt sie "bla bla".

Wie beheben zu?

+0

ich auf diese Frage kam für einen schnellen Weg, um ping/Test-Verbindung/Test-NetConnection-. Ich entschied mich für dieses Skript: https://gallery.technet.microsoft.com/scriptcenter/Fast-asynchronous-ping-IP-d0a5cf0e/ – YetAnotherRandomUser

Antwort

10

empfangen ist keine Eigenschaft des Objekts, Test-Connection kehrt, so $(test-connection server -count 1).received auf Null auswertet. Du überlegst es; Verwenden Sie einfach if (Test-Connection -Count 1). Um die Fehlermeldung zu unterdrücken, verwenden -ErrorAction SilentlyContinue oder Rohr der Befehl an Out-Null. Eine der folgenden arbeiten:

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

oder

if (Test-Connection server -Count 1 | Out-Null) { write-host "blah" } else {write-host "blah blah"} 
+0

Danke für Ihre Hilfe! – Glowie

18

Versuchen Sie, die -Quiet Schalter:

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 
+5

Dies ist die richtige Antwort. –

+0

Ich weiß, oder?Dies ist ___EXACTLY___, wofür dieser Switch entwickelt wurde, bis hin zur Unterdrückung von Fehlern –

0

einen besserer Liner, die wir bei der Produktion verwenden

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

Verwendungsbeispiel 1:

test_connection_ipv4 10.xx.xxx.50 
True 

Verwendungsbeispiel 2:

test_connection_ipv4 10.xx.xxx.51 
False