Jump to content

von mehereren Rechnern Textdatei auslesen


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Geschrieben

Wow, na da hat sich doch mal jemand Gedanken gemacht, dass man diese, von mir gestellte Aufgabe in einen PS Einzeiler bekommt sehe ich zwar noch nicht, werde das Script von Dir @BOfH_666 am Montag mal testen, ich perönlich finde Powershel jedenfalls um einiges kryptischer, aber ist wohl Gewöhnungssache, bin halt eher für schnelle funktionierende Lösungen, als für simple Aufgabenstellungen gleich ne andere Sprache erlernen zu müssen. Aber ist wohl Geschmackssache, ich jedenfalls habe bei PowershellScripten oftmals festgestellt, dass auf verschiednen Rechnern unterschiedliche Grundvorrausetzungen bzgl. bestimmter Repostories etc. vorhanden sind, gibte es zwar teilweise bei Batch auch, zumindest nicht ganz so arg.

 

 

Schönes Wochende noch  und Danke

 

 

  Zitat

foreach($i in (2..254)){[PSCustomObject]@{IP="192.168.178.$i";File=If(Test-Connection "192.168.178.$i" -Cou 1 -Q){Test-Path "\\192.168.178.$i\c$\Program Files (x86)\Prg\aktvers.txt"}else{'n/a'}}}

Mehr  

Dieser Einzeiler ist ja wirklich beindruckend, er macht das selbe wie das Script weiter obben, nur leider kann mit dem Ergebnis keiner was anfangen, oder soll ich die Ip Adressen durchzählen um die IP zu finden, auf dem die Datei existiert, und mehr tut diesers Script ja nicht. Ich wollte im Prinzip eine CSV als Ergebnis, mit 4 Spalten, IP,Hostname, Hoststaus und die ausgelesen Nummer aus der Datei. Mit einer solchen Datei kann niemand etwas anfangen, oder doch?

 

IP            File
--            ----
192.168.178.2 n/a
192.168.178.3 n/a
192.168.178.4 n/a
192.168.178.5 n/a
192.168.178.6 n/a
192.168.178.7 n/a
192.168.178.8 n/a
192.168.178.9 n/a
192.168.17... n/a
192.168.17... n/a
192.168.17... n/a
192.168.17... n/a
192.168.17... n/a
192.168.17... n/a
192.168.17... n/a
192.168.17... n/a
192.168.17... n/a
192.168.17... n/a
192.168.17... F...
192.168.17... True
192.168.17... F...
192.168.17... n/a

Gruss

Stefan

 

Geschrieben (bearbeitet)

Die Faszination für Einzeiler hab ich irgendwie noch nie verstanden. :hmmm:  

  Am 12.3.2021 um 01:19 schrieb stefan4711:

finde Powershel jedenfalls um einiges kryptischer, aber ist wohl Gewöhnungssache

Mehr  

hmmmm ... Du meinst also, dass sowas hier eingängiger und leichter verständlich ist?

ping -n 1 %NET%.%%f | findstr /i "TTL" >nul 2>&1 && (

Hmmm .... da werden wir wohl unterschiedlicher Meinung bleiben.

  Am 12.3.2021 um 01:19 schrieb stefan4711:

bin halt eher für schnelle funktionierende Lösungen, als für simple Aufgabenstellungen gleich ne andere Sprache erlernen zu müssen

Mehr  

Aber CMD/Batch musstest Du doch auch irgendwann mal gelernt haben ... oder konntest Du das einfach irgendwann einfach so?  ;-) 

  Am 12.3.2021 um 01:19 schrieb stefan4711:

festgestellt, dass auf verschiednen Rechnern unterschiedliche Grundvorrausetzungen bzgl. bestimmter Repostories etc. vorhanden sind

Mehr  

Das kommt auf Deine Aufgabe drauf an. Wenn Du z.B. ein AD abfragen möchtest, ist es mit einem entsprechenden Modul einfacher. Dafür gibt es aber auch Lösungen.

  Am 12.3.2021 um 01:19 schrieb stefan4711:

nur leider kann mit dem Ergebnis keiner was anfangen, oder soll ich die Ip Adressen durchzählen um die IP zu finden

Mehr  

Hmmm ... Du kannst mit dem Ergebnis nix anfangen.  :achtung:  ... Wenn man CMD/Batch gewöhnt ist - quasi eine Hohepriesterin der kryptischen Eigenheiten - wird man wohl Powershell auch die ein oder andere kleine Schrulligkeit durchgehen lassen müssen, oder?  ;-) 

Um die Kommandozeile zu verkürzen, habe ich die Eigenschaftsnamen (IP, File) sehr kurz gewählt. Und Powershell ist immer bemüht Platz zu sparen, also schneidet es ab einer gewissen Länge, die ausgegebenen Werte auf der Konsole ab. Aber eben auch nur auf der Konsole. Die eigentlichen Werte sind noch da. Und auch dagegen ist natürlich ein Kraut gewachsen.

$a=foreach($i in (2..254)){[PSCustomObject]@{IP="192.168.178.$i";File=If(Test-Connection "192.168.178.$i" -Cou 1 -Q){Test-Path "\\192.168.178.$i\c$\Program Files (x86)\Prg\aktvers.txt"}else{'n/a'}}};$a|ft -a

 

bearbeitet von BOfH_666
Geschrieben (bearbeitet)

Hallo,

 

  Zitat

ping -n 1 %NET%.%%f | findstr /i "TTL" >nul 2>&1 && (

Mehr  

von daher sagte ich ja auch Gewöhnungsache, am Anfang war das für mich auch kryptisch, mit dieser Zeile teste ich, ob ein PC vorhanden ist, indem ich einenPing ausführe und nach em String TTL, der bei einem erfolgreichen Ping immer unten steht, suchen lasse. Da mich die  Ausgabe nicht interessiert, schicke ich diese mit >nul ins Nirvana, wie gesagt Gewöhnungssache.

 

  Zitat

Aber CMD/Batch musstest Du doch auch irgendwann mal gelernt haben ... oder konntest Du das einfach irgendwann einfach so

Mehr  

Ne natürlich nicht, und von könne will ich ja auch gar nicht reden, zumindest führt eine Scriptsprache mit der man sich wenigstens zu 10% auskenntimmer noch eher zum Ziel, als eine Scriptsprache bei der man sich zu 0% auskennt, insb. wenn es sich um eine einfach strukturierte Aufgabe handelt.

 

  Zitat

$a=foreach($i in (2..254)){[PSCustomObject]@{IP="192.168.1

Mehr  

Werde ich ausprobieren, danke für den Hinweis. (An welcher Stelle mus ich das denn einfügen?Trotzdem habe ich aber immer mehr das Gefühl, dass ich mich bei der Aufgabenstellung wohl nicht ganz verständlich ausgedrückt hatte, ich möchte eine CSV Liste erhalten, die ggf. auch für einen Entscheidungsträger in lesbarer Form zur Verfügung stellen.

 

danke und lg

 

stefan

bearbeitet von stefan4711
Geschrieben (bearbeitet)
  Am 12.3.2021 um 13:59 schrieb stefan4711:

(An welcher Stelle mus ich das denn einfügen?

Mehr  

Wieso einfügen? Entweder Du nimmst das ausführliche Script, oder die komplette Zeile, die ich zuletzt gepostet hatte.

  Zitat

ich möchte eine CSV Liste erhalten, die ggf. auch für einen Entscheidungsträger in lesbarer Form zur Verfügung stellen.

Mehr  

Das hast Du wohl vergessen zu erwähnen. Das macht mich dann aber schon ein wenig stutzig. Welche Entscheidung wird denn von wem auf Grund dieser Information getroffen? Der letzte Einzeiler, den ich gepostet hatte, erzeugt eine Variable "$a", die Liste mit den Informationen enthält, welche Rechner erreichbar waren und welche dann auch noch die Datei hatten.

Mit 

$a | Where-Object -Property File -EQ -Value $true

filterst Du alle Rechner aus, die nicht erreichbar waren oder die Datei nicht hatten.

Mit 

$a | Where-Object -Property File -EQ -Value $false

könntest Du alles rausfiltern, was nicht erreichbar war und was die Datei hatte und mit 

$a | Where-Object -Property File -EQ -Value 'n/a'

gibst Du nur noch die Adressen aus, die nicht erreichbar waren.

 

Wenn Du unbedingt willst, kannst Du die Ausgabe aber natürlich noch mit jeder Menge Prosa anreichern, was den Informationsgehalt aber auch nicht wirklich erhöht.  ;-) 

 

Edit:

Achja ... ganz vergessen ... mit 

$a | Export-Csv -Path D:\sample\liste.csv -Delimiter ';' -NoTypeInformation

exportierst Du die Liste in eine CSV-Datei mit dem Trennzeichen "Semikolon".  Ein deutsches Excel erkennt diese also auch als CSV und zeigt sie ansatzweise vernünftig an.

bearbeitet von BOfH_666
Geschrieben (bearbeitet)
  Zitat

ich möchte eine CSV Liste erhalten, die ggf. auch für einen Entscheidungsträger in lesbarer Form zur Verfügung stellen.

Mehr  

Weil es so oder so, ich habe natürlich beides schon ausprobiert, sich an der Ausgabe nichts ändert, ab der 10 Position ,in etwa, seh ich nur noch Punkte, das ist nicht die gewünschte Ausgabe, ich habe keine Glaskugel hier.

 

  Zitat

ich möchte eine CSV Liste erhalten, die ggf. auch für einen Entscheidungsträger in lesbarer Form zur Verfügung stellen.

Mehr  

Nein hatte ich bereits im Anfangspost erwähnt und dann noch 2 weitere Male;) Aber das passiert mir oft, dass man was bei mir überließt, wenn man mir das in der Umkehrung ebenso nachsieht, ist alles ok;) menschlich

  Zitat

wenn er den jweiligen Hostnamen mittels nslookup mit angeben würde und dies in eine CSV schreibt, gibt es da eine Möglichkeit?

 

Vielen Dank i.V.

Mehr  

 

 

Den Code werde ich morgen noch mal in Ruhe ausprobieren, ich bedanke mich schon mal für den hilfreichen Ansatz,, bloß die ... müssen auf jeden Fall weg, ob Scnörkel oder nicht, ich will die Information haben, und ... hat keinen Infogehalt für mich. Nennt mich b***d, aber da find ich die gute alte Batch immer noch einleuchtender, auch, wenn ich oft genug selber schon drauf geschimpft habe;)

 

Gruß

 

Stefan

 

bearbeitet von stefan4711
Geschrieben
  Am 12.3.2021 um 20:21 schrieb stefan4711:

ab der 10 Position ,in etwa, seh ich nur noch Punkte,

Mehr  

Das ist mit der letzten Kommandozeile, die ich gepostet habe - die mit dem "$a=foreach..." vorne dran, technisch unmöglich. Natürlich macht es nur Sinn, wenn Du die Grundlagen von Powershell verstanden hast und nicht bei jeder Kleinigkeit andere fragen musst. Das ist genau wie bei anderen komplexen Technologien. Sie erschließen sich nicht, nachdem man ein paar Zeilen Code von anderen Leute kopiert und ausprobiert hat. Ein bissl mehr gehört eben schon dazu.

  Am 12.3.2021 um 20:21 schrieb stefan4711:

ich möchte eine CSV Liste erhalten

Mehr  

stimmt ... na das Prinzip hab ich ja dann auch schon

 

erklärt.  ;-)  Wenn das funktioniert, können wir ja nochmal über die genaue "Form" sprechen. Oder vielleicht kommst Du ja schon selber drauf. Ich hatte ja schon erklärt, welche Ausgabe bei welchen Bedingungen erzeugt werden. Das kann man natürlich den eigenen Anforderungen anpassen. 

 

  Am 12.3.2021 um 20:21 schrieb stefan4711:

...  bloß die ... müssen auf jeden Fall weg,

Mehr  

Wie schon mehrfach erklärt ... den richtigen Code nehmen, dann klappt das.

Geschrieben
  Am 11.3.2021 um 20:07 schrieb stefan4711:

stuck was? egal, bestimmt ne Floskel, wie ach wie furchbar

Mehr  

So war das nicht gemeint - ich spreche fließend Batch (inkl delayedExpansion und aller Variationen von "for") und VBScript. Ich hab auch mit |, & und > mehr Erfahrung als die meisten (eins davon reicht übrigens, doppelte braucht man nicht). Nur verstehe ich nicht, warum sich noch jemand in aufwändige Batch-Konstrukte reinfuchst, wenn es in Powershell so viel einfacher ist.

 

"Code von anderen" trägt zu meinen Skripts übrigens sicher mehr als 30% bei - die meisten Standardprobleme hat ja schon mal jemand gelöst, ich erfinde nicht gerne neue Räder :-)

Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...