Testen der Verbindung zum FTP-Server mit PowerShell Test-Connection

2461
yazan

Ich versuche es mit diesem Skript, aber es hat nicht funktioniert

$file = "test.txt"  $filePath = "C:\" + $file  $server = "ftp://server"  IF (Test-Connection -ComputerName $server -Quiet -Count 1 -ErrorAction SilentlyContinue) { $ftp = $server+$file  $webclient = New-Object System.Net.WebClient  $uri = New-Object System.Uri($ftp)  "Uploading $File..."  $webclient.UploadFile($uri, $filePath) } ELSE  

Wenn ich das Skript starte, habe ich die Meldung "error" im Host, dass es keinen Kontakt mit dem Server gibt, aber wenn ich ein Ping-Signal an den Server sendet, antwortet er

1
Wie hat es nicht funktioniert? Was hat es gemacht? Hat es etwas getan? Haben Sie Fehlermeldungen erhalten? Was * genau * passiert? Sie können Ihre Frage bearbeiten, um Details hinzuzufügen. Mokubai vor 7 Jahren 1
Kann `Test-Connection` sogar so verwendet werden? [Die Dokumentation] (https://docs.microsoft.com/de-de/powershell/module/Microsoft.PowerShell.Management/Test-Connection?view=powershell-5.1) besagt, dass * ICMP-Echo-Anforderungspakete gesendet werden (" pings ") an einen oder mehrere Computer. * und dass Sie * die Computernamen oder IP-Adressen im IPv4- oder IPv6-Format eingeben müssen *. Was ich zu sagen versuche: ** `Test-Connection` funktioniert nicht mit` ftp: // `, sondern nur mit der IP / URL selbst. ** flolilolilo vor 7 Jahren 1
was ich versuche zu sagen, wenn (der Server-Ping) die Datei aus dem Pfad c: \ file.txt auf den FTP-Server hochlädt} else yazan vor 7 Jahren 0
Prüfen Sie zunächst, ob der FTP-Port geöffnet ist. $ ftpClient = New-Object System.Net.Sockets.TCPClient; $ ftpClient.Connect ('$ server', 21); $ ftpClient.Connected Antony vor 7 Jahren 1

2 Antworten auf die Frage

1
Martin Prikryl

Da @flolilolilo bereits kommentiert ist, Test-Connectionakzeptiert das einen Hostnamen, keine URL. Sie müssen es also servernur mit aufrufen, nicht mit ftp://server.

Wenn Sie das Problem behoben haben, stehen Sie vor einem anderen Problem, dass Ihre URI falsch ist, da zwischen serverund ein Schrägstrich fehlt test.txt. Die URI sollte sein ftp://server/test.txt.


Und ich sehe sowieso keinen Sinn für einen Anruf Test-Connection. Versuchen Sie einfach, die Datei sofort hochzuladen.

Martin hat recht. Test-Connection akzeptiert keine URLs, sondern Hostnamen und IPS (v4 und 6). Er hat auch Recht mit `Test-Connection`, da das icmp-Echo (Ping) in vielen Netzwerken blockiert ist. Daher kann es auch bei einem Server zur Ausgabe von false führen. Wenn Sie nach bestimmten geöffneten Ports suchen möchten, können Sie das Cmdlet `Test-NetConnection` verwenden, z. B.` Test-NetConnection -ComputerName ftpserver -Port 22 -InformationLevel Quiet -WarningAction SilentlyContinue` WeatherForecastingRat vor 7 Jahren 2
Mein Punkt ist: Ich habe eine Liste von FTP-Servern und ich möchte die gleiche Datei auf alle FTP-Server hochladen, aber vor dem Hochladen muss ich wissen, ob der Server mit dem Netzwerk verbunden ist, also möchte ich, dass das Skript modifiziert wird (Testverbindung). Wenn der Server lebt >> Datei senden, wenn tot - Nachricht schreiben (Fehler) yazan vor 7 Jahren 0
Aber warum? Warum versuchst du nicht einfach hochzuladen? Und wenn der Upload fehlschlägt, schreiben Sie die Nachricht. Kein Konnektivitätstest würde Ihnen garantieren, dass der Upload trotzdem erfolgreich ist. Martin Prikryl vor 7 Jahren 0
denn ich möchte hochladen file.zpl yazan vor 7 Jahren 0
Wie beantwortet das meine Frage? Martin Prikryl vor 7 Jahren 2
cuz Ich möchte upload file.zpl. Ich möchte ZPL-Befehle an einen Zebra-Drucker senden, um den Community-Namen zu ändern. Ich möchte also wissen, ob die Datei korrekt gesendet wird oder nicht. Ich möchte nicht jede IP mit SNMP überprüfen wenn der Community Name geändert wurde yazan vor 7 Jahren 0
Wir verstehen, dass Sie eine Datei hochladen möchten. Und noch einmal: Das Testen der Konnektivität garantiert nicht, dass ein Upload erfolgreich ist. Sie müssen den tatsächlichen Upload testen und die Ergebnisse überprüfen, um zu sehen, ob alles in Ordnung ist. Es ist also absolut sinnlos, die Konnektivität vor dem Hochladen zu testen. Einfach hochladen und Testergebnisse testen! Martin Prikryl vor 7 Jahren 1
Es ist wirklich kompliziert. Ich erkläre die ganze Idai. Ich habe 200 Zebra-Drucker. Ich möchte das gesamte Kennwort und den Community-Namen für alle Drucker in einem Skript ändern. Das Kennwort von defult ist 1234 und der Community-Name ist PUBLIC Wenn der Drucker mit dem Netzwerk verbunden ist, sende ich den Befehl yazan vor 7 Jahren 0
Fein von mir - auf diese Weise können Sie protokollieren, welcher Drucker nicht reagiert hat. Mein Punkt aus dem vorigen Kommentar war jedoch, dass nicht alle Netzwerkgeräte auf Echoanfragen reagieren (normalerweise aus Sicherheitsgründen gesperrt). Bei Druckern ist dies normalerweise nicht der Fall. Wenn Sie testen möchten, ob der FTP-Server aktiv ist, testen Sie den Port, auf dem der Dienst ausgeführt wird (normalerweise 22). WeatherForecastingRat vor 7 Jahren 0
@WeatherForecastingRat Es ist 21, nicht 22. + Ich bekomme den Punkt sowieso nicht, aber es liegt am OP. Martin Prikryl vor 7 Jahren 0
:) richtig ist 22 ssh. WeatherForecastingRat vor 7 Jahren 0
@MartinPrikryl Ich denke, dass dies einige Vorteile hat, z. B. erstellen Sie eine Reihe von Objekten im Skript und einige andere speicherintensive Aufgaben (nicht nur FTP-Upload) für jeden Server. Sie prognostizieren auch, dass der angemessene Anteil Ihrer Netzwerkgeräte möglicherweise ausgefallen ist. Es ist besser, die Konnektivität zu testen, bevor Sie weniger Ressourcen verbrauchen. WeatherForecastingRat vor 7 Jahren 0
@WeatherForecastingRat yah endlich jemand meinen Punkt sehen :) yazan vor 7 Jahren 0
Trotzdem würde ich den eigentlichen Upload zusätzlich versuchen, da es keine Garantie dafür gibt, dass es nur gelingt, weil der Drucker eingeschaltet und verfügbar ist. flolilolilo vor 7 Jahren 1
0
yazan

Ich benutze den Befehl get-content, um eine Liste der IP-Adressen abzurufen und einen Ping-Vorgang durchzuführen, wenn die IP eine Live-FTP-Sitzung öffnet und die Datei an den Drucker sendet

$printers = get-content "C:\......\servers.txt" $info="C:\CommunityName.zpl"  $ftp = "ftp://$ip/dir/CommunityName.zpl"  $user = ""  $pass = ""  $webclient = New-Object System.Net.WebClient  $webclient.Credentials = New-Object System.Net.NetworkCredential($user,$pass)   foreach ($ip in $printers){ IF (Test-Connection -ComputerName $ip -Quiet -Count 1 -ErrorAction SilentlyContinue){  try { $uri = New-Object System.Uri($ftp) $webclient.UploadFile($uri, $info) Write-Host "UploadFile it's done $ip" -backGround Green }   catch { Write-Host "An Error occured while uploading file to: $Uri" Throw  } } ELSE{ Write-Host "no conacting $ip" -backGround Red} } 
Das ist mein ursprüngliches Skript. Ich möchte es ändern, um die Datei zuerst zu senden, um den Community-Namen zu ändern. Danach sende ich gut den SNMP-Befehl, um das gesamte Kennwort mit dem SNMPSET-Befehl zu ändern. snmpget -v1 -c private $ ip enterprises.10642.20.10.10.5.11.4.0; yazan vor 7 Jahren 0
also das funktioniert jetzt? Wenn nicht: Bitte ändern Sie Ihre Frage, wenn Sie Details hinzufügen möchten - es ist sehr verwirrend, wenn aus Antworten Fragen werden. flolilolilo vor 7 Jahren 0
Dieses Skript funktioniert für mich, um eine Liste von Servern zu senden und den SNMP-Befehl zu senden, aber ich möchte es bearbeiten, um Zeilen für die Sende-Datei ZPL über FTP hinzuzufügen yazan vor 7 Jahren 0
Verwenden Sie `System.Net.Webclient` oder` System.Net.FtpWebRequest `wie in Ihrer Frage - das Problem war mit URL vs Hostname (Hostname geht an` test-connection`-URL an `webclient`). Darüber hinaus können Sie das PSFTP-Modul installieren und es mit Cmdlets behandeln. WeatherForecastingRat vor 7 Jahren 0
das ist mein abschließendes Skript, ich bearbeite es, und es funktioniert jetzt für mich, danke für alles :) yazan vor 7 Jahren 0