marabunta
Goto Top

Powershell Seite laden und schreiben

Hallo,

ein Skript soll eine Seite laden und gleichzeitig den Content in eine Datei schreiben - es soll nicht laden und danach schreiben. Es geht nicht um Speicher, sondern die Verbindung bricht ab und nur ein kleiner Teil wird tatsächlich benötigt.


Also sowas geht nicht:
$jobScript = {
    param($url, $outfile)

    $response = Invoke-WebRequest -Uri $url
    $response.Content | Out-File -FilePath $outfile
}

Geht sowas mit PowerShell?

Danke

Content-ID: 14211180272

Url: https://administrator.de/contentid/14211180272

Ausgedruckt am: 24.11.2024 um 02:11 Uhr

manuel-r
manuel-r 18.01.2024 aktualisiert um 16:03:44 Uhr
Goto Top
Meinst du etwa so?
(Invoke-WebRequest -Uri $url).Content | Out-File $outfile
Genau genommen ist das aber immer noch nacheinander. Namlich erst mit Invoke-Webrequest empfangen und dann mit Out-File schreiben. Nur, dass das Übergeben an die Variable/das Objekt entfällt.

Manuel
Marabunta
Marabunta 18.01.2024 um 16:08:45 Uhr
Goto Top
leider nicht, ich will sozusagen die halbe datei haben, wenn ich strg+c drücke.
Bisher bricht es ab und ich hab nichts.
TK1987
Lösung TK1987 18.01.2024 um 16:14:15 Uhr
Goto Top
Moin,

Zitat von @Marabunta:
leider nicht, ich will sozusagen die halbe datei haben, wenn ich strg+c drücke.
sicher geht das
 Invoke-WebRequest -UseBasicParsing -Uri $Url -OutFile $outfile

Gruß Thomas
10138557388
Lösung 10138557388 18.01.2024 aktualisiert um 17:02:52 Uhr
Goto Top
Aloha!
Oder alternativ zu Invoke-Webrequest "zu Fuß" mittels HttpClientStream
Add-Type -AssemblyName System.Net.http
$sr = [System.IO.StreamReader]::new([System.Net.Http.HttpClient]::new().GetStreamAsync("https://raw.githubusercontent.com/blocklistproject/Lists/master/everything.txt").GetAwaiter().GetResult())  
while(!$sr.EndOfStream){
    $sr.ReadLine() | Add-Content ausgabe.txt
}
Du kannst damit auch nur eine bestimme Anzahl an Bytes/Zeilen/Strings aus dem Stream lesen wenn du nur wenige bytes von den Seiten brauchst, System.IO.Stream bzw. der System.IO.Streamreader haben mehrere Methoden dafür an Bord, dann brauchst du auch nicht mit STRG+C abbrechen sondern liest so lange den Stream aus bis das kommt was du suchst.
z.B.
Add-Type -AssemblyName System.Net.http
$sr = [System.IO.StreamReader]::new([System.Net.Http.HttpClient]::new().GetStreamAsync("https://raw.githubusercontent.com/blocklistproject/Lists/master/everything.txt").GetAwaiter().GetResult())      
while(!$sr.EndOfStream){
    $line = $sr.ReadLine()
    # suche nach Text in der Zeile
    if ($line -like '*10bet.com*'){    
        # mache etwas wenn gefunden
        write-host "Zeile gefunden"  
        # breche die Schleife ab
        break
    }
}
$sr.Dispose()
PJ