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-Key: 14211180272

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

Printed on: April 27, 2024 at 09:04 o'clock

Member: manuel-r
manuel-r Jan 18, 2024 updated at 15:03:44 (UTC)
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
Member: Marabunta
Marabunta Jan 18, 2024 at 15:08:45 (UTC)
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.
Member: TK1987
Solution TK1987 Jan 18, 2024 at 15:14:15 (UTC)
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
Mitglied: 10138557388
Solution 10138557388 Jan 18, 2024 updated at 16:02:52 (UTC)
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