Log über Verfügbarkeit einer Datei auf einem Web- und SFTP-Server
Hallo zusammen,
eins vorweg: ich habe minimale Kenntnisse in Skripten und werde mich da auch mehr mit beschäftigen müssen.
Ich bitte euch um Hilfe bei folgendem Problem.
Ich muss die Erreichbarkeit eines Servers prüfen und loggen. Hintergrund: angeblich ist der Server häufig nicht erreichbar und die Dateien können nicht abgerufen werden.
Es greifen zwei verschiedene Anwendungen auf den Server zu:
1) es wird eine HTML-Datei, welche über einen Webservice (ich glaube Glassfish) bereitgestellt wird, abgerufen
2) eine PDF wird per SFTP nach lokal kopiert
Um das ganze nachzustellen, hat mir ein Kollege eine Textdatei auf dem Server bereit gestellt, welche ich per URL und SFTP erreichen kann.
Ich habe mit dem Punkt 1 begonnen und lade die txt mittels
herunter. Tritt kein Fehler auf, ist der Webservice verfügbar.
Versuche ich eine nicht vorhandene Datei abzurufen, erhalte ich Fehler 1, versuche ich das mit einem Tippfehler in der URL um einen nicht verfügbaren Server zu simulieren, erhalte ich Fehler 2.
Fehler 1:
Fehler 2:
Diese 3 Möglichkeiten möchte ich dann in ein Log schreiben. Weiß aber nicht wie ich es korrekt mache. Ich habe mit Try/Catch gespielt und konnte zumindest bei Fehlern einen Eintrag erzeugen. Da hatte ich das Problem das die erfolgreichen Zugriffe nicht geschrieben werden können, da ichvermutlich mit Sicherheit falsch vorgehe.
Ich habe ein tolles Beispiel für das Schreiben einer Log-Datei gefunden [1] und möchte das gern nutzen.
Kann mich jemand dabei unterstützen? Oder zumindest in die richtige Richtung schubsen?
Viele Grüße
Nidavellir
[1] https://germanpowershell.com/logdatei-erstellen/
eins vorweg: ich habe minimale Kenntnisse in Skripten und werde mich da auch mehr mit beschäftigen müssen.
Ich bitte euch um Hilfe bei folgendem Problem.
Ich muss die Erreichbarkeit eines Servers prüfen und loggen. Hintergrund: angeblich ist der Server häufig nicht erreichbar und die Dateien können nicht abgerufen werden.
Es greifen zwei verschiedene Anwendungen auf den Server zu:
1) es wird eine HTML-Datei, welche über einen Webservice (ich glaube Glassfish) bereitgestellt wird, abgerufen
2) eine PDF wird per SFTP nach lokal kopiert
Um das ganze nachzustellen, hat mir ein Kollege eine Textdatei auf dem Server bereit gestellt, welche ich per URL und SFTP erreichen kann.
Ich habe mit dem Punkt 1 begonnen und lade die txt mittels
Invoke-WebRequest -Uri "https://URL/mp_s_testfile.txt" -OutFile "C:\temp\test.txt"
Versuche ich eine nicht vorhandene Datei abzurufen, erhalte ich Fehler 1, versuche ich das mit einem Tippfehler in der URL um einen nicht verfügbaren Server zu simulieren, erhalte ich Fehler 2.
Fehler 1:
Invoke-WebRequest : Oops, something went wrong.
In Zeile:1 Zeichen:1
+ Invoke-WebRequest -Uri "https://URL ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
Fehler 2:
Invoke-WebRequest : Die Verbindung mit dem Remoteserver kann nicht hergestellt werden.
In Zeile:1 Zeichen:1
+ Invoke-WebRequest -Uri "https://URL-mitFehler ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
Diese 3 Möglichkeiten möchte ich dann in ein Log schreiben. Weiß aber nicht wie ich es korrekt mache. Ich habe mit Try/Catch gespielt und konnte zumindest bei Fehlern einen Eintrag erzeugen. Da hatte ich das Problem das die erfolgreichen Zugriffe nicht geschrieben werden können, da ich
Ich habe ein tolles Beispiel für das Schreiben einer Log-Datei gefunden [1] und möchte das gern nutzen.
Kann mich jemand dabei unterstützen? Oder zumindest in die richtige Richtung schubsen?
Viele Grüße
Nidavellir
[1] https://germanpowershell.com/logdatei-erstellen/
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 612806
Url: https://administrator.de/contentid/612806
Ausgedruckt am: 22.11.2024 um 14:11 Uhr
9 Kommentare
Neuester Kommentar
Moin,
Hast Du denn schon mal in die Logs des Servers geschaut, was da so steht? Und was steht in den Logs der betroffenen Clients? Was ist der Grund für die Nichterreichbarkeit. Wieso "angeblich"? Meiner Erfahrung nach denken User sich sowas in der Regel nicht aus.
Oder ist das nicht Dein Server? Hast Du dann schon die Kollegen informiert, die den Server betreiben? Meiner Erfahrung nach sind die allermeisten Kollegen, wenn man ihnen anständige Fehlerbeschreibungen mit Originalfehlermeldungen und Logeinträgen zur Verfügung stellt, gerne bereit, das Problem zu lösen.
So, nun die Antwort auf Deine Frage :
https://www.netz-weise-it.training/weisheiten/powershell-ausgabestroeme- ...
Liebe Grüße
Erik
Zitat von @Nidavellir:
Hallo zusammen,
eins vorweg: ich habe minimale Kenntnisse in Skripten und werde mich da auch mehr mit beschäftigen müssen.
Ich bitte euch um Hilfe bei folgendem Problem.
Ich muss die Erreichbarkeit eines Servers prüfen und loggen. Hintergrund: angeblich ist der Server häufig nicht erreichbar und die Dateien können nicht abgerufen werden.
Es greifen zwei verschiedene Anwendungen auf den Server zu:
1) es wird eine HTML-Datei, welche über einen Webservice (ich glaube Glassfish) bereitgestellt wird, abgerufen
2) eine PDF wird per SFTP nach lokal kopiert
Hallo zusammen,
eins vorweg: ich habe minimale Kenntnisse in Skripten und werde mich da auch mehr mit beschäftigen müssen.
Ich bitte euch um Hilfe bei folgendem Problem.
Ich muss die Erreichbarkeit eines Servers prüfen und loggen. Hintergrund: angeblich ist der Server häufig nicht erreichbar und die Dateien können nicht abgerufen werden.
Es greifen zwei verschiedene Anwendungen auf den Server zu:
1) es wird eine HTML-Datei, welche über einen Webservice (ich glaube Glassfish) bereitgestellt wird, abgerufen
2) eine PDF wird per SFTP nach lokal kopiert
Hast Du denn schon mal in die Logs des Servers geschaut, was da so steht? Und was steht in den Logs der betroffenen Clients? Was ist der Grund für die Nichterreichbarkeit. Wieso "angeblich"? Meiner Erfahrung nach denken User sich sowas in der Regel nicht aus.
Oder ist das nicht Dein Server? Hast Du dann schon die Kollegen informiert, die den Server betreiben? Meiner Erfahrung nach sind die allermeisten Kollegen, wenn man ihnen anständige Fehlerbeschreibungen mit Originalfehlermeldungen und Logeinträgen zur Verfügung stellt, gerne bereit, das Problem zu lösen.
So, nun die Antwort auf Deine Frage :
https://www.netz-weise-it.training/weisheiten/powershell-ausgabestroeme- ...
Liebe Grüße
Erik
Moin,
So ist es. Du kannst Dir das ganze Gedöns mit dem If-else sparen und Dir die Fehlermeldungen direkt ins log schreiben. Pass auf:
Hier ist test.txt leer.
Und hier steht die komplette Fehlermeldung in test.txt.
Warum das so ist, steht in dem Link. Hier nochmal genauer von MS direkt:
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...
Liebe Grüße
Erik
Ich vermute der Link von erikro sollte mir an eben dieser Stelle helfen?
So ist es. Du kannst Dir das ganze Gedöns mit dem If-else sparen und Dir die Fehlermeldungen direkt ins log schreiben. Pass auf:
PS C:\Users\XXX> get-childitem blah | Out-File test.txt
get-childitem : Der Pfad "C:\Users\XXX\blah" kann nicht gefunden werden, da er nicht vorhanden ist.
In Zeile:1 Zeichen:1
+ get-childitem blah | Out-File test.txt
+ ~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:\Users\XXX\blah:String) [Get-ChildItem], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
PS C:\Users\XXX> cat test.txt
Hier ist test.txt leer.
PS C:\Users\XXX> get-childitem blah 4&>1 | Out-File test.txt
PS C:\Users\XXX> cat test.txt
get-childitem : Der Pfad "C:\Users\XXX\blah" kann nicht gefunden werden, da er nicht vorhanden ist.
In Zeile:1 Zeichen:1
+ get-childitem blah 2>&1 | Out-File test.txt
+ ~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:\Users\XXX\blah:String) [Get-ChildItem], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
Und hier steht die komplette Fehlermeldung in test.txt.
Warum das so ist, steht in dem Link. Hier nochmal genauer von MS direkt:
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...
Liebe Grüße
Erik
Gerne.
Für die Übersichtlichkeit wollte ich nicht die ganze Meldung, sondern nur eine Kurzfassung ins Log schreiben.
Der Kunde wäre aber beeindruckt. Und wenn man so schwachsinnige Wünsche des Kunden erfüllen muss, dann muss man ihm auch geben, was er will. Dinge, die er nicht wirklich versteht. Vor allem hat aber die Methode den Vorteil, dass Du alle Fehlermeldungen bekommst und nicht nur die, die Du erwartest.
Trotzdem halte ich das Ansinnen weiter für zweifelhaft. Es sagt nichts über die Erreichbarkeit der Site aus, wenn Du es nur von einem Punkt aus misst. Dafür gibt es Dienstleister wie den hier z. B. (erster Treffer bei Tante Googel, keine Empfehlung):
https://www.uptrends.de/tools/uptime
Sinn macht das Messen einer externen Erreichbarkeit nämlich nur dann, wenn man das von allen möglichen Punkten aus unter verschiedenen Bandbreitenbedingungen testet. Wenn ich hier eine in Deutschland gehostete Site messe, sagt das über die Erreichbarkeit in Peru nichts aus.
Deshalb würde ich dem Kunden raten, dass er einfach mal ein paar Euro zahlt und so einen Dienst beauftragt. Alles andere ist sinnlos. Außerdem hat der Kunde ja Zweifel an Deiner Dienstleistung. Allein schon deshalb würde ich da auf einen externen Dienstleister bestehen. Wenn der Kunde partout darauf nicht eingeht, würde ich den je nach Situation vielleicht eine Weile selbst bezahlen, um einfach neutrale Zahlen zu haben, falls es darauf ankommt.
Auf jeden Fall hab ich durch die Bastelei ein paar Sachen gelernt.
Das ist immer gut. Dann noch ein kleiner Hinweis: Du hattest weiter ober erwähnt, dass Du es mit einem try-catch-Konstrukt versucht hast. Das ist eigentlich eine schicke Sache, wenn es um Fehlerbehandlung geht. Man muss dazu nur ein wissen. Du musst an den Befehl, dessen Erfolg Du testen willst, ein
-ErrorAction Continue
Liebe Grüße
Erik