mbudde 0 Geschrieben 3. April 2014 Melden Teilen Geschrieben 3. April 2014 Hallo, ich arbeite leider nur ganz selten mit der Powershell und bräuchte mal eure Hilfe. Und zwar habe ich folgendes Script ... $excel = New-Object -ComObject Excel.Application $excel.visible = $True $workbook = $excel.Workbooks.add() $sheet = $workbook.worksheets.Item(1) $path = "C:\Log\TP010\all1404.txt" $input = Get-Content $path foreach ($temp in $input) { $Inhalttrennen = $temp.Split("=") $Tx = $Inhalttrennen[2] $Rx = $Inhalttrennen[3] $Ausgabe = "$($Tx) $($Rx)" $Ausgabe >> C:\Log\TP010\split1.txt } $path = "C:\Log\TP010\split1.txt" $input = Get-Content $path foreach ($temp in $input) { $Inhalttrennen = $temp.Split(" ") $Tx = $Inhalttrennen[-5] $Rx = $Inhalttrennen[3] $sheet.cells.item(1,1) = "$Tx" $sheet.cells.item(1,2) = "$Rx" } Wie bekomme ich es hin, dass jeweils der nächste Wert von $Tx in 2,1 geschrieben wird bzw der nächste $Rx Wert in 2,2. Wäre schön wenn mir einer helfen könnte. Mit freundlichen Grüßen MBudde Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 3. April 2014 Melden Teilen Geschrieben 3. April 2014 Was steht denn in $Tx und $rx? Wieso machst du das mit der Zwischendatei split1? Wieso machst du das nicht in einem Schritt? In der ersten Foreach Schleife das speichern in die Excel Datei schreiben. Du brauchst übrigends noch einen zähler und (z.B. $row) und schreibst dann nach: $sheet.cells.item($row,1) = "$Tx" Zitieren Link zu diesem Kommentar
mbudde 0 Geschrieben 4. April 2014 Autor Melden Teilen Geschrieben 4. April 2014 Vlt. fange ich nochmal ganz vorne an... Eine Zeile aus all1404.txt 03.04.2014 11:16:54 INFO - MONITOR: Media=GPRS / UMTS, Tx=64 Byte, Rx=0 Byte Zeile aus Split1.txt 64 Byte, Rx 0 Byte Im ersten Schritt wird halt ein Split auf das = gemacht und im zweiten halt auf das Leerzeichen. Nachher steht halt in $Tx 64 und in $Rx 0 Genau an dem Zäler hängt es, da komme ich nicht weiter... Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 4. April 2014 Melden Teilen Geschrieben 4. April 2014 Vor der Schleife ein Wert definieren $i = 0 und in jedem durchlauf um eines erhöhen $i++ oder $i = $i + 1 Du kannst beide Splits in einem Schritt machen und musst das nicht in eine Datei zwischenspeichern. $foo.split('a').split('b') Zitieren Link zu diesem Kommentar
mbudde 0 Geschrieben 4. April 2014 Autor Melden Teilen Geschrieben 4. April 2014 Habe das jetzt abgeändert. $excel = New-Object -ComObject Excel.Application $excel.visible = $True $workbook = $excel.Workbooks.add() $sheet = $workbook.worksheets.Item(1) $alleLogDateien = get-content "$CopyZiel\$i\all$LogJahr$LogMonat.txt" $row = 0 foreach ($schneiden in $alleLogDateien) { $schneiden=$schneiden.Split("=").Split(" ") $Tx=$schneiden[1] $Rx=$schneiden[3] $row = $row +1 $sheet.cells.item($row,1) = "$Tx" $sheet.cells.item($row,2) = "$Rx" } und bekomme folgenden Fehlermeldung: Fehler beim Aufrufen der Methode, da [system.String[]] keine Methode mit dem Namen "Split" enthält.Bei C:\Users\mbudde\Desktop\TP_NCP_Log\split.ps1:33 Zeichen:43+ $schneiden=$schneiden.Split("=").Split <<<< (" ") + CategoryInfo : InvalidOperation: (Split:String) [], RuntimeException + FullyQualifiedErrorId : MethodNotFound Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 4. April 2014 Melden Teilen Geschrieben 4. April 2014 (bearbeitet) Hmm. Beim Split nach = kommt bei mir etwas ganz anderes heraus: > $foo.Split('=')03.04.2014 11:16:54 INFO - MONITOR: MediaGPRS / UMTS, Tx64 Byte, Rx0 Byte Beim 2. Split, da macht er ein Array daraus. Du brauchst da eigentlich dann gar nicht mehr splitten: > $foo.Split(',')[1] Tx=64 Byte D.h. #Tx > $foo.Split(',')[1].split('=')[1].split(' ')[0] 64 #Rx > $foo.Split(',')[2].split('=')[1].split(' ')[0] 0 Oder auch mit Substring: $tx = $foo.Split(',')[1].trim() $tx.Substring($($tx.IndexOf('=')+1),$($tx.IndexOf(' ')-$($tx.IndexOf('=')+1))) Bzw. ausgeschrieben zum besseren Verständnis: $tx = $foo.Split(',')[1].trim() $first = $tx.IndexOf('=')+1 $second = $tx.IndexOf(' ') $tx.Substring($first,$second-$first) bearbeitet 4. April 2014 von Dukel Zitieren Link zu diesem Kommentar
mbudde 0 Geschrieben 4. April 2014 Autor Melden Teilen Geschrieben 4. April 2014 Danke. Es kommt zwar immer noch ein Fehler aber das Ergebnis stimmt. Sie können keine Methode für einen Ausdruck mit dem Wert NULL aufrufen.Bei C:\Users\mbudde\Desktop\TP_NCP_Log\split.ps1:35 Zeichen:29+ $Tx=$foo.Split(',')[1].split <<<< ('=')[1].split(' ')[0] + CategoryInfo : InvalidOperation: (split:String) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 4. April 2014 Melden Teilen Geschrieben 4. April 2014 Ich hatte es halt mit deiner geposteten Zeile getestet. Bei mir klappt dies. Vielleicht sehen manche Zeilen etwas anders aus. Zitieren Link zu diesem Kommentar
mbudde 0 Geschrieben 7. April 2014 Autor Melden Teilen Geschrieben 7. April 2014 Beim mir klappt es jetzt auch, hatte noch was anderes in der Datei stehen, ist mir heute erst aufgefallen. Danke für deine super Hilfe. Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 7. April 2014 Melden Teilen Geschrieben 7. April 2014 Gerne. Du kannst auch dein fertiges Script hier Posten, falls jemand ein Ähnliches Problem hat. Zitieren Link zu diesem Kommentar
mbudde 0 Geschrieben 7. April 2014 Autor Melden Teilen Geschrieben 7. April 2014 Na klar das mache ich... Hätte aber noch eine kleine Frage und zwar stehen in der Datei vor dem Splitten alle Werte doppelt, das ist der eigentlichen Log Datei geschuldet aus der ich diese bekomme. Dies sieht dann so aus ... 03.04.2014 11:16:54 INFO - MONITOR: Media=GPRS / UMTS, Tx=64 Byte, Rx=0 Byte03.04.2014 11:16:54 INFO - MONITOR: Media=GPRS / UMTS, Tx=64 Byte, Rx=0 Byte03.04.2014 11:20:03 INFO - MONITOR: Media=GPRS / UMTS, Tx=144842 Byte, Rx=180219 Byte03.04.2014 11:20:03 INFO - MONITOR: Media=GPRS / UMTS, Tx=144842 Byte, Rx=180219 Byte03.04.2014 11:16:54 INFO - MONITOR: Media=GPRS / UMTS, Tx=6400 Byte, Rx=555 Byte03.04.2014 11:16:54 INFO - MONITOR: Media=GPRS / UMTS, Tx=6400 Byte, Rx=555 Byte03.04.2014 11:20:03 INFO - MONITOR: Media=GPRS / UMTS, Tx=14484200 Byte, Rx=18021999 Byte03.04.2014 11:20:03 INFO - MONITOR: Media=GPRS / UMTS, Tx=14484200 Byte, Rx=18021999 Byte Versuche jetzt schon den ganzen morgen jede 2 Zeile zu löschen. allerdings wird das nichts... Das ist übrigens nur ein kleiner Auszug aus der Datei und die Werte sind immer unterschiedlich. Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 7. April 2014 Melden Teilen Geschrieben 7. April 2014 Speicher eine Zeile in einer Variable und vergleiche beim nächsten Schleifendurchlauf diese und überspringe dann ggf. das Schreiben. Zitieren Link zu diesem Kommentar
mbudde 0 Geschrieben 7. April 2014 Autor Melden Teilen Geschrieben 7. April 2014 Die Idee hatte ich auch schon, weiss halt nicht wie ich einzelne Zeilen anspreche. Zitieren Link zu diesem Kommentar
Daniel -MSFT- 129 Geschrieben 7. April 2014 Melden Teilen Geschrieben 7. April 2014 Mal ne kurze Gegenfrage: Was willst Du denn am Ende mit dem Ergebnis erreichen? Ausrechnen, wie viel Traffic da durch ging? Ich habe sowas früher an der Kommandozeile automatisiert. Mit uniq.exe kannst Du zum Beispiel die doppelten Zeilen rausfiltern und mit awk.exe die Spalten aufteilen und sogar aufsummieren, wenn die Gesamtsumme von Interesse ist: http://unxutils.sourceforge.net/UnxUpdates.zip Have fun!Daniel Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 7. April 2014 Melden Teilen Geschrieben 7. April 2014 Im ersten Script ist deine aktuelle Zeile $temp in #5 ist es $schneiden. Du musst das aber vor dem Split machen. Einfach diese Variable in eine neue Variable kopieren und bei jedem Durchlauf überprüfen. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.