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

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'}}}

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

 

Link zu diesem Kommentar

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

vor 6 Stunden schrieb stefan4711:

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

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.

vor 6 Stunden schrieb stefan4711:

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

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

vor 6 Stunden schrieb stefan4711:

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

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.

vor 6 Stunden schrieb stefan4711:

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

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
Link zu diesem Kommentar

Hallo,

 

Zitat

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

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

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

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
Link zu diesem Kommentar
vor 32 Minuten schrieb stefan4711:

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

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.

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
Link zu diesem Kommentar
Zitat

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

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.

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.

 

 

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
Link zu diesem Kommentar
vor 4 Stunden schrieb stefan4711:

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

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.

vor 4 Stunden schrieb stefan4711:

ich möchte eine CSV Liste erhalten

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. 

 

vor 4 Stunden schrieb stefan4711:

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

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

Link zu diesem Kommentar
Am 11.3.2021 um 21:07 schrieb stefan4711:

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

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 :-)

Link zu diesem Kommentar
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...