none
Powershell bei Fehler nicht Automatisch beenden.

    Frage

  • hallo

    brauche bitte kleine Hilfe das wäre bei diesen Script. Wenn kein Ping, Host, Port erreicht wird, dann soll Power Shell das Fenster nicht schließen. Es ist alles in Ordnung dann soll Power Shell Schließen das ist wichtig. Habt Ihr da bitte eine Lösung??

    Wenn Fehler ist sende er mir eine email könnt ihr mir bitte helfen bin da nicht so fit

    PS C:\> echo off
    >>
    >> Test-NetConnection muster.dyndns.org -Port 1951 -InformationLevel "Detailed"

    >> Test-NetConnection muster.dyndns.org -Port 1952 -InformationLevel "Detailed"

    >> Test-NetConnection muster.dyndns.org -Port 1953 -InformationLevel "Detailed"

    >> Test-NetConnection muster.dyndns.org -Port 1954 -InformationLevel "Detailed"

    >> Test-NetConnection muster.dyndns.org -Port 1958 -InformationLevel "Detailed"

    WARNUNG: TCP connect to (84.167.98.234 : 1958) failed

    NICHT SCHLIESSEN WENN WARNUNG IST

    PS C:\> echo off
    >>
    >> Test-NetConnection muster.dyndns.org -Port 1951 -InformationLevel "Detailed"

    >> Test-NetConnection muster.dyndns.org -Port 1952 -InformationLevel "Detailed"

    >> Test-NetConnection muster.dyndns.org -Port 1953 -InformationLevel "Detailed"

    >> Test-NetConnection muster.dyndns.org -Port 1954 -InformationLevel "Detailed"

    >> Test-NetConnection muster.dyndns.org -Port 1955 -InformationLevel "Detailed"

    wenn alles passt dann soll das Fenster Schließen


    • Bearbeitet Melonya Freitag, 12. Mai 2017 15:26
    Freitag, 12. Mai 2017 14:55

Antworten

  • > gibt es da keine andere lösung ???

    Sicher, die von Evgenij und mir. :)

    Ich befürchte das wird so nichts. Wenn du nicht einerseits erstmal die Basics von Powershell lernst und darüber hinaus versuchst die Vorschläge, die dir hier gemacht werden, nachzuvollziehen und wirklich zu verstehen, anstatt von einem zu anderen zu springen, kommt da am Ende nicht vernünftiges bei raus. Selbst wenn es irgendwann so funktioniert wie du es willst, stehst du spätestens bei der nächsten kleinen Änderung wieder auf dem Schlauch.

    Abgesehen davon, die von mir unten gepostete Variante funktioniert. Der Grund warum du immer "Fehler" angezeigt bekommst, ist das Test- NetConnection neben dem Verbindungsversuch auch eine DNS-Abfrage macht. Wenn die nicht erfolgreich ist, schreibt er das in den Fehlerspeicher.
    Wenn du das nicht sehen willst, kannst du auch einfach die Ausgabe von $error weglassen. Die anderen Warnungen werden trotzdem angezeigt.

    $ports = @(1951,1952,1953,1954,1954)
    $target = 'muster.dyndns.org'
    $fehler = 0
    
    foreach ($port in $ports) {
        $res = Test-NetConnection $target -Port $port 
    	if (!($res.PingSucceeded -and $res.TCPTestSucceeded)) { $fehler = 1 }
    }
    if ($fehler) { Read-Host "Return drücken..." }

     
    Grüße, Denniver



    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Code Manager v5: Link
    (u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    Sonntag, 14. Mai 2017 23:33
    Moderator

Alle Antworten

  • $host.SetShouldExit(1)

    dürfte das sein, was Du suchst. Die 1 ist dabei willkürlich und ist quasi der Return Code.

    EDIT: Ach nee, sorry, habe den Post falsch gelesen. Also die obere Zeile schließt schon mal das Fenster. Die Ergebnisse kriegst Du viellecht so konsolidiert:

    $ports = @(1951,1952,1953,1954,1958)
    $target = 'muster.dyndns.org'
    $conn_ok = $true
    foreach ($port in $ports) {
        $res = Test-NetConnection $target -Port $port
        $conn_ok = $conn_ok -and $res.PingSucceeded -and $res.TCPTestSucceeded
    }
    if ($conn_ok) {
        $host.SetShouldExit(0)
    }
    oder so ähnlich.



    Freitag, 12. Mai 2017 19:44
  • Hier mal ein Vorschlag auf die schnelle

    if ( (Test-netConnection muster.dyndns.org -Port 1951 -InformationLevel Quiet) -and 
    (Test-NetConnection muster.dyndns.org -Port 1952 -InformationLevel Quiet) -and 
    (Test-NetConnection muster.dyndns.org -Port 1953 -InformationLevel Quiet) -and
    (Test-NetConnection muster.dyndns.org -Port 1954 -InformationLevel Quiet) -and
    (Test-NetConnection muster.dyndns.org -Port 1955 -InformationLevel Quiet) )
    {
    Write-Host "ok"
    exit
    }
    else
    {
    Write-Host "nicht"
    }


    Benjamin Hoch
    MCSE: Data Platform & Data Management and Analytics
    MCSA: SQL Server 2012/2014 & 2016 DB Administration
    MCSA: Windows Server 2012

    Freitag, 12. Mai 2017 19:53
  • Vielen Dank für die Antwort ich habe es Probiert

    bei diesen Scrip ist alles Richtig und schließt das Fenster, wenn ich den Port 1954 auf 1958 ändere schließt wieder das Fenster das ist ein Fehler sollte es bitte offen bleiben. Leider bleibt es nicht

    $ports = @(1951,1952,1953,1954,1954)
    $target
    = 'muster.dyndns.org'
    $conn_ok
    = $true
    foreach ($port in $ports) {
        $res
    = Test-NetConnection $target -Port $port $conn_ok = $conn_ok -and $res.PingSucceeded -and $res.TCPTestSucceeded
    }
    if ($res) {
        $host
    .SetShouldExit(0)
    }

    Freitag, 12. Mai 2017 20:20
  • Vielen Dank für die Antwort ich habe es Probiert

    bei diesen Scrip ist alles Richtig und schließt das Fenster, wenn ich den Port 1954 auf 1958 ändere schließt wieder das Fenster das ist ein Fehler sollte es bitte offen bleiben. Leider bleibt es nicht

    Freitag, 12. Mai 2017 20:20
  • Klar, es sollte natürlich im letzten if heißen if ($conn_ok) ;-)

    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> http://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    Freitag, 12. Mai 2017 20:36
  • Könntest du mir bitte bitte komplett diesen Skript schreiben das er beim Fehler das Fenster nicht schließt
    Freitag, 12. Mai 2017 20:43
  • Melonya, hier gibt es keine fertigen Lösungen auf Bestellung. Du musst schon etwas mitarbeiten.

     


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Code Manager v5: Link
    (u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    Samstag, 13. Mai 2017 00:59
    Moderator
  •  

    Aber ich denke ich weiss jetzt was du meinst:

    $ports = @(80,110)
    $target = 'internetbeacon.msedge.net'
    $fehler = 0
    
    foreach ($port in $ports) {
        $res = Test-NetConnection $target -Port $port 
    	if (!($res.PingSucceeded -and $res.TCPTestSucceeded)) { $fehler = 1 }
    }
    if ($fehler) { Read-Host "$error `nReturn drücken..." }

        




    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Code Manager v5: Link
    (u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.



    Samstag, 13. Mai 2017 10:08
    Moderator
  • ich habe diesen Script augeführt es ist immer fehler der ping geht aber zum dyndns.

    muster.dyndns.org : Der DNS-Eintrag ist nicht vorhanden muster.dyndns.org : muster.dyndns.org : Der DNS-Eintrag ist nicht vorhanden muster.dyndns.org : muster.dyndns.org : Der DNS-Eintrag ist nicht vorhanden muster.dyndns.org : muster.dyndns.org : Der DNS-Eintrag ist nicht vorhanden muster.dyndns.org : muster.dyndns.org : Der DNS-Eintrag ist nicht vorhanden muster.dyndns.org : muster.dyndns.org : Der DNS-Eintrag ist nicht vorhanden muster.dyndns.org :
    Return drücken...:

    $ports = @(1951,1952,1953,1954,1955,1956,1957,80,49412)
    $target = 'muster.dyndns.org'
    $fehler = 0

    foreach ($port in $ports) {
        $res = Test-NetConnection $target -Port $port
        if (!($res.PingSucceeded -and $res.TCPTestSucceeded)) { $fehler = 1 }
    }
    if ($fehler) { Read-Host "$error `nReturn drücken..." }

    bitte um Hilfe

    Samstag, 13. Mai 2017 14:46
  • wir haben die lösung jetzt, das sieht so aus und Funktioniert:

    if ( (Test-netConnection ayad.dyndns.org -Port 1951 -InformationLevel Quiet) -and
    (Test-NetConnection xxxx.dyndns.org -Port 1952 -InformationLevel Quiet) -and
    (Test-NetConnection xxxx.dyndns.org -Port 1953 -InformationLevel Quiet) -and
    (Test-NetConnection xxxx.dyndns.org -Port 1954 -InformationLevel Quiet) -and
    (Test-NetConnection xxxx.dyndns.org -Port 1955 -InformationLevel Quiet) -and
    (Test-NetConnection xxxx.dyndns.org -Port 1956 -InformationLevel Quiet) -and
    (Test-NetConnection xxxx.dyndns.org -Port 1957 -InformationLevel Quiet) -and
    (Test-NetConnection xxxx.dyndns.org -Port 80 -InformationLevel Quiet) -and
    (Test-NetConnection xxxx.dyndns.org -Port 49412 -InformationLevel Quiet) )
    {
    Write-Host "ok"
    }
    else
    {
    Write-Host "nicht"
    pause
    }

    wenn ich jetzt zwei  Fehler einbaue bekomme ich nur einen fehler den zweiten nicht:

    WARNUNG: TCP connect to (84.167.104.146 : 1959) failed
    nicht
    Drücken Sie die Eingabetaste, um den Vorgang fortzusetzen...:

    ich brauche auch den zweiten Fehler oder mehrere fehler anzeigen.

    ich bitte dich noch mal mir zu helfen.

    Vielen Dank

    Sonntag, 14. Mai 2017 11:17
  • > WARNUNG: TCP connect to (84.167.104.146 : 1959) failed

    Interessant - 1959 taucht in Deinem Code gar nicht auf?

    Normalerweise würde man so was mit einem Array lösen, das man in einer Foreach-Schleife an Test-Netconnection übergibt.

    Und warum sollte der zweite Fehler nicht auftauchen? Bist Du sicher, daß es 2 Fehler gibt?

    Sonntag, 14. Mai 2017 12:30
  • Hallo Danke für die Antwort dieser Script läuft durch, weil kein Fehler vorhanden ist. Der falsche Script hat 1959 & 1958 siehe unten, diese Ports gibt es nicht, nur beim Auswerten kommt ein Fehler es müssen 2 Fehler kommen. Ich möchte, wenn zwei Adressen nicht angepingt werden können das beide als Fehler angezeigt werden. Also für jede Adresse die nicht angepingt werden kann wollte ich eine Fehlermeldung.

    Ich komme einfach nicht weiter. Bitte um Hilfe Danke

    Funktionierender SCRIPT

    if ( (Test-netConnection ayad.dyndns.org -Port 1951 -InformationLevel Quiet) -and
    (Test-NetConnection xxxx.dyndns.org -Port 1952 -InformationLevel Quiet) -and
    (Test-NetConnection xxxx.dyndns.org -Port 1953 -InformationLevel Quiet) -and
    (Test-NetConnection xxxx.dyndns.org -Port 1954 -InformationLevel Quiet) -and
    (Test-NetConnection xxxx.dyndns.org -Port 1955 -InformationLevel Quiet) -and
    (Test-NetConnection xxxx.dyndns.org -Port 1956 -InformationLevel Quiet) -and
    (Test-NetConnection xxxx.dyndns.org -Port 1957 -InformationLevel Quiet) -and
    (Test-NetConnection xxxx.dyndns.org -Port 80 -InformationLevel Quiet) -and
    (Test-NetConnection xxxx.dyndns.org -Port 49412 -InformationLevel Quiet) )
    {
    Write-Host "ok"
    }
    else
    {
    Write-Host "nicht"
    pause
    }

    ----------------------------------------------------------------------------------------------------------------------------

    FEHLER SCRIPT

    if ( (Test-netConnection ayad.dyndns.org -Port 1951 -InformationLevel Quiet) -and
    (Test-NetConnection xxxx.dyndns.org -Port 1952 -InformationLevel Quiet) -and
    (Test-NetConnection xxxx.dyndns.org -Port 1953 -InformationLevel Quiet) -and
    (Test-NetConnection xxxx.dyndns.org -Port 1954 -InformationLevel Quiet) -and
    (Test-NetConnection xxxx.dyndns.org -Port 1958 -InformationLevel Quiet) -and
    (Test-NetConnection xxxx.dyndns.org -Port 1956 -InformationLevel Quiet) -and
    (Test-NetConnection xxxx.dyndns.org -Port 1959 -InformationLevel Quiet) -and
    (Test-NetConnection xxxx.dyndns.org -Port 80 -InformationLevel Quiet) -and
    (Test-NetConnection xxxx.dyndns.org -Port 49412 -InformationLevel Quiet) )
    {
    Write-Host "ok"
    }
    else
    {
    Write-Host "nicht"
    pause
    }

    Sonntag, 14. Mai 2017 16:23
  • Hallo,

    der Grund warum das Skript nur einen Fehler liefert ist klar und auch vollkommen korrekt. Das Problem ist hier die logische and Verknüpfung der Tests.

    Bei einer Und Verknüpfung wird die Auswertung der einzelnen Prüfungen abgebrochen wenn der erste Vergleich false liefert. Denn dann kann der Gesamtausdruck nur noch false liefern. Eine weitere Prüfung der nachfolgenden Und Bedingungen ist nicht mehr notwendig und wird auch nicht mehr durchgeführt. Diese Implementierung entspricht auch der Definition der Digitallogik für logische Operatoren.

    Endlich kann ich den Mist aus dem Informatik Grundstudium mal gebrauchen :)


    Benjamin Hoch
    MCSE: Data Platform & Data Management and Analytics
    MCSA: SQL Server 2012/2014 & 2016 DB Administration
    MCSA: Windows Server 2012

    Sonntag, 14. Mai 2017 16:57
  • gibt es da keine andere lösung ???
    Sonntag, 14. Mai 2017 18:41
  • > gibt es da keine andere lösung ???

    Sicher, die von Evgenij und mir. :)

    Ich befürchte das wird so nichts. Wenn du nicht einerseits erstmal die Basics von Powershell lernst und darüber hinaus versuchst die Vorschläge, die dir hier gemacht werden, nachzuvollziehen und wirklich zu verstehen, anstatt von einem zu anderen zu springen, kommt da am Ende nicht vernünftiges bei raus. Selbst wenn es irgendwann so funktioniert wie du es willst, stehst du spätestens bei der nächsten kleinen Änderung wieder auf dem Schlauch.

    Abgesehen davon, die von mir unten gepostete Variante funktioniert. Der Grund warum du immer "Fehler" angezeigt bekommst, ist das Test- NetConnection neben dem Verbindungsversuch auch eine DNS-Abfrage macht. Wenn die nicht erfolgreich ist, schreibt er das in den Fehlerspeicher.
    Wenn du das nicht sehen willst, kannst du auch einfach die Ausgabe von $error weglassen. Die anderen Warnungen werden trotzdem angezeigt.

    $ports = @(1951,1952,1953,1954,1954)
    $target = 'muster.dyndns.org'
    $fehler = 0
    
    foreach ($port in $ports) {
        $res = Test-NetConnection $target -Port $port 
    	if (!($res.PingSucceeded -and $res.TCPTestSucceeded)) { $fehler = 1 }
    }
    if ($fehler) { Read-Host "Return drücken..." }

     
    Grüße, Denniver



    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Code Manager v5: Link
    (u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    Sonntag, 14. Mai 2017 23:33
    Moderator
  • Entschuldigung das ich nicht Perfekt bin, deswegen frage ich doch hier weil hier einfach Spezialisten gibt für PowerShell. Meine Schwer Punkte sind andere Bereiche, wo ich hier auch mithelfen kann und was dazu lernen könnte.

    Wenn da eine Software geben würde könnte ich ohne zu zögern schnell kaufen.




    • Bearbeitet Melonya Montag, 15. Mai 2017 07:22
    Montag, 15. Mai 2017 07:15