Jump to content
michach

Powershell Ausgabe umleiten

Recommended Posts

Hallo Community,

 

ich habe ein kleiner Problem und hoffe hier die Lösunf zu finden.

Ich habe ein Script mit dem ich mit einer WebRequest Abfrage Informationen anfragen möchte. 

Die funktioniert auch soweit, also die Ausgabe passt soweit ohne Probleme.

 

Allerdings habe ich das Problem diese Ausgabe auch vernünftig umleiten zu können.

 

Meine Ausgabe im Powershell Fenster sieht so aus:

Name
Christophe Nwadikwa 
Nationalität
Belgien 
Aktuelles Team
 SV Eversten 
Alter
32 Jahre
Position
Torwart
Gewicht
83 kg
Grösse
1,88 Meter
Fuß
Beide
Marktwert
10.649 €
Vertragslaufzeit
Ende Saison 5 (1 Saison, 24 Wochen) 
Jahresgehalt
4.500 € 
Im Verein seit
Saison 3, Spieltag 15 (Woche 15) 
KARTEN 
(AKTUELLE SAISON)
Keine Karten

 

 

 

Genau das möchte ich in einer txt oder csv Date ausgeben. Allerdings bekomme eich immer ein html Format raus, oder folgende Ausgabe:

 

StatusCode        : 200
StatusDescription : OK
Content           : <div id="leagueNavWrapper" class="ol-league-nav-wrapper ol-nav-wrapper-slim teamoverview-banner-wrapper" style="height: 250px;">
                        <div id="ol-bg-pattern" class="hidden-xs ol-state-bg-color-9 ol-bac...
RawContent        : HTTP/1.1 200 OK
                    Transfer-Encoding: chunked
                    Connection: keep-alive
                    Vary: Accept-Encoding
                    Cache-Control: no-cache
                    Content-Type: text/html; charset=UTF-8
                    Date: Wed, 17 Jun 2020 18:49:44 GMT
                    Set-Co...
Forms             : {}
Headers           : {[Transfer-Encoding, chunked], [Connection, keep-alive], [Vary, Accept-Encoding], [Cache-Control, no-cache]...}
Images            : {@{innerHTML=; innerText=; outerHTML=<IMG style="transform: scale(1)" src="https://xxxxxxxx.s3.eu-central-1.amazonaws.com/userimages/38997-5ea471930092d.png" width=29 height=30>; outerText=; tagName=IMG; style=transform: scale(1); 
                    src=https://xxxxxxxx.s3.eu-central-1.amazonaws.com/userimages/38997-5ea471930092d.png; width=29; height=30}, @{innerHTML=; innerText=; outerHTML=<IMG style="transform: scale(1)" 
                    src="https://xxxxxxxx.s3.eu-central-1.amazonaws.com/userimages/38997-5ea471930092d.png" width=29 height=30>; outerText=; tagName=IMG; style=transform: scale(1); 
                    src=https://xxxxxxxx.s3.eu-central-1.amazonaws.com/userimages/38997-5ea471930092d.png; width=29; height=30}}
InputFields       : {}
Links             : {@{innerHTML=<I class="fa fa-angle-left hover-gray" style="COLOR: black"></I>; innerText=; outerHTML=<A href="#url=player/overview?playerId=724543"><I class="fa fa-angle-left hover-gray" style="COLOR: black"></I></A>; outerText=; tagName=A; 
                    href=#url=player/overview?playerId=724543}, @{innerHTML=<I class="fa fa-angle-right hover-gray" style="COLOR: black"></I>; innerText=; outerHTML=<A href="#url=player/overview?playerId=768944"><I class="fa fa-angle-right hover-gray" style="COLOR: 
                    black"></I></A>; outerText=; tagName=A; href=#url=player/overview?playerId=768944}}
ParsedHtml        : mshtml.HTMLDocumentClass
RawContentLength  : 41816

 

-------------------------------------------------------------------

 

Bei der .csv Datei kommen die Werte, allerdings komplett mit allen möglichen HTML Zeichen.

Mein Code:

$parseURL    = 'https://www.xxxxxxxx.de/player/overview?playerId=327880'
$webRequest  = Invoke-WebRequest -Uri $parseURL 
$webRequest.ParsedHTML.getElementsByTagName('div') | Where-Object {$_.ClassName -eq 'row ol-player-table-row'} | Select-Object -ExpandProperty innerText
$webRequest | Export-Csv -Path D:\test_powershell\spieler.csv -UseCulture -NoTypeInformation
#$webRequest | out-file -filepath D:\test_powershell\spieler.txt
$Test = Get-Content D:\test_powershell\spieler.csv

 

Ich möchte eigentlich nur genau den Test in eine Datei ausgeben, der mir auch in dem Powershell Fenster angezeigt wird.

 

Hoffe ich habe mich verständlich ausgedrückt und mir hier jemand helfen kann :)

 

Vielen Dank.

Share this post


Link to post

Ja wenn Du nur das im File haben willst, warum gibst Du dann nicht auch genau das in das File rein? Vergleiche mal Zeile 3 und Zeile 4/5 von deinem Sample Code - vielleicht fällt es Dir ja selber auf :-)

(Spoiler: Zeile 3 macht die Bildschirmausgabe)

Share this post


Link to post

Hallo michach, Willkommen im MSCEBoard.

 

vor 1 Stunde schrieb michach:
 

Meine Ausgabe im Powershell Fenster sieht so aus:

Wie genau sieht denn der Code aus, der die Ausgabe in der Konsole in der gewünschten Form erzeugt?

 

Edit: Wer lesen kann ist klar im Vorteil ... ;-)  Danke Martin.   Witzig: Du leitest alles um, nur nicht die einzige Code-Zeile, die Dir das gewünschte Ergebnis liefert.  ;-) :D 

Edited by BOfH_666

Share this post


Link to post

:-) Ich bin berühmt und gefürchtet für meine spontan-kurzen, aber meist treffsicheren Minimalhinweise :smile2:

  • Haha 1

Share this post


Link to post

Vielen Dank für eure schnelle Antworten, ist irgendwie ein Denkfehler gewesen :)

 

Mit dem folgenden Code bekomme ich jetzt meine Ausgabe in der .txt Datei:

$webRequest.ParsedHTML.getElementsByTagName('div') | Where-Object {$_.ClassName -eq 'row ol-player-table-row'} | Select-Object -ExpandProperty innerText  | out-file -filepath D:\test_powershell\spieler.txt

Die Datei sieht dann so aus (also fast perfekt):

Name
Christophe Nwadikwa 
Nationalität
Belgien 
Aktuelles Team
 SV Eversten 
Alter
32 Jahre
Position
Torwart
Gewicht
83 kg
Grösse
1,88 Meter
Fuß
Beide
Marktwert
10.649 €
Vertragslaufzeit
Ende Saison 5 (1 Saison, 24 Wochen) 
Jahresgehalt
4.500 € 
Im Verein seit
Saison 3, Spieltag 15 (Woche 15) 
KARTEN 
(AKTUELLE SAISON)
Keine Karten 

 

 

Allerdings funktioniert es nicht mit dem Export in eine .csv Datei. Mein Gedanke ist folgender gewesen:

$webRequest.ParsedHTML.getElementsByTagName('div') | Where-Object {$_.ClassName -eq 'row ol-player-table-row'} | Select-Object -ExpandProperty innerText  | Export-Csv -Path D:\test_powershell\spieler.csv

Und da sieht es denn so aus:

image.png.cb333c20bf4ad006007afeb8f6dc6ad3.png#TYPE System.StringLength

 

 

Warum bekomme ich diese Daten nicht in eine .csv Datei. Parameter habe ich schon alles mögliche versucht, ob mit Delimeter,  -NoClobber oder -NoTypeInformation

 

Habe ich hier vielleicht etwas übersehen ?

 

 

Vielen Dank :)

Share this post


Link to post

Ok, mit folgendem Befehl habe ich das in eine .csv Datei bekommen, zwar nicht mit Export-Csv (ob dieser Befehl doch extra dafür gedacht ist, oder ?), aber mit folgendem Befehl:

$webRequest.ParsedHTML.getElementsByTagName('div') | Where-Object {$_.ClassName -eq 'row ol-player-table-row'} | Select-Object -ExpandProperty innerText  | out-file -filepath D:\test_powershell\spieler.csv

Hier habe ich einfach die .txt Endung in .csv Endung getausch.

Jetzt habe ich folgendes Ergebnis in einer Spalte:

 

image.png.200ed5f4b6595a39763803dd2fb8014b.pngName

 

Meine Frage:

Wie kann ich hier jetzt sortieren ? Bedeutet:

Zeile 1 (Name) + Zeile 2 (Christophe Nwadikwa ) -> Spalte 1

Zeile 3 (Nationalität) + Zeile 4 (Belgien) -> Spalte 2

usw.

 

Oder sollte ich das aus der Textdatei exportieren und direkt sortieren ? Wenn ja, wie würde das gehen ?

Vielen Dank noch einmal :)

Edited by michach

Share this post


Link to post

Ich kenne das Format Deines Inputs nicht - aber Export-Csv ist nur dann geeignet, wenn es Objekte erhält mit Properties, die "einfache" Inhalte haben. Einfach heißt "keine Arrays, keine embedded Objects" etc.

Dazu solltest Du analysieren, was am Ende Deiner Pipe-Rutsche nach "Select-Object -ExpandProperty innerText" herauskommt. Das muß vermutlich erst mal etwas aufbereitet werden.

Share this post


Link to post

Vielen Dank zusammen, ich habe hier eine Lösung gefunden, wen es interessiert.

 

Abrufen und Speichern in einer Text Datei:

$webRequest.ParsedHTML.getElementsByTagName('div') | Where-Object {$_.ClassName -eq 'container playeroverviewtablestriped'} | Select-Object -ExpandProperty innerText  | out-file -filepath D:\test_powershell\$vari.txt

 

Funktion wo die Daten aus der .txt Datei gezogen und als eine .csv Datei exportiert werden. Hier werden auch die Spalten definiert:

function Get-MyData {
$var = get-content "D:\test_powershell\$vari.txt"

  $userID = $vari
  $name = $var[1]
  $nation = $var[3]
  $team = $var[5]
  $alter = $var[7]
  $position = $var[9]
  $gewicht = $var[11]
  $groesse = $var[13]
  $fuss = $var[15]
  $marktwert = $var[17]
  $vertragslaufzeit = $var[19]
  $jahresgehalt = $var[21]
  $imverein = $var[23]
  $karten = $var[26]
  $verletzung = $var[28]
  $columns = @{ 'UserID' = $userID
                'Name' = $name
                'Nationalitaet' = $nation
                'Aktuelles_Team' = $team 
                'Alter' = $alter
                'Position' = $position
                'Gewicht' = $gewicht
                'Groeße' = $groesse 
                'Fuss' = $fuss
                'Marktwert' = $marktwert
                'Vertragslaufzeit' = $vertragslaufzeit
                'Jahresgehalt' = $jahresgehalt
                'Im_Verein_seit' = $imverein
                'Karten' = $karten
                'Verletzungen' = if($verletzung -ne "6. ONLINELIGA"){$verletzung} else {""} }

  New-Object -Type PSObject -Prop $columns
}

 

Als nächstes habe ich eine Funktion um die .csv Datei in eine Excel Datei zu wandeln:

function CSv-Export-Spieler {

    $csv = "D:\test_powershell\spieler.csv"
    $xls = "D:\test_powershell\spieler.xls"

    $xl = new-object -comobject excel.application
    $xl.visible = $false
    $Workbook = $xl.workbooks.open($CSV)
    $Worksheets = $Workbooks.worksheets

    $Workbook.SaveAs($XLS,1)
    $Workbook.Saved = $True

    $xl.Quit()

}

 

Damit werden alle Spieler mit ihren Attributen in eine Excel Datei gespeichert. Der letzte Schritt ist nur zum testen gewesen. Die .csv wird in die MySQL DB geladen um mit VB und JavaScript drauf zugreifen zu können. Hier bin ich noch nicht sicher was ich genau nehme, bisher ist alles in VB eingerichtet.

Vielen Dank zusammen.

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


Werbepartner:



×
×
  • Create New...