PowerShell Retry WebRequest - RateLimit

 

Wer beim Aufruf einer API immer wieder mal keine Antwort bekommt, kann mit folgender Funktion einen Retry implementieren. Die Funktion versucht den Aufruf nach einigen Sekunden erneut, nach jedem Versuch in immer grĂ¶ĂŸeren AbstĂ€nden und gibt dann nach einer eingestellten Anzahl an Versuchen auf.

Invoke-WebRequestRetry

function Invoke-WebRequestRetry {
    Param
    (
        $Uri,
        $retrycount = 0
    )
    $args = @{
        Uri = $uri
        Headers = $global:headers 
        Method = "Get"
        ContentType = "application/json"
    }
    try {
        $result = (Invoke-WebRequest @args)
    } catch {        
        if ($_.Exception -like "*404*") { 
            write-output "404 Not Found '$uri'"
            return 
        } else {
            $retrycount++
            $waitSeconds = 10 * $retrycount
            if ($retrycount -gt 10) {
                write-error  "$($_.Exception) '$uri'"
                Throw "Retrycount exceeded"
            }
            write-output "$($_.Exception) URI: '$uri' will wait $($waitSeconds) Seconds Retry ($retrycount/10)"
            Start-sleep $waitSeconds
            Invoke-WebRequestRetry -uri $uri -retrycount $retrycount
        } 
    }
    if ($result.count -gt 0) {
        return $result
    } 
}

Aufruf

$token="??????"
$global:headers=@{Authorization = "Bearer $token"}
Invoke-WebRequestRetry -uri "https://domain.api.domain/apirequest" 
positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE fĂŒr deine Bewertung!

Veröffentlichung: 22.02.2022 von Bernhard |🔔 | Kommentare:2

➚ PowerShell Email versenden: Send-MailMessage | ➊ PowerShell Beispiele | PowerShell TCP-Listener ➚

Top-Artikel in diesem Bereich


PowerShell: Dateiattribute: Datum Àndern - ganz ohne Tools

Als Alternative zu speziellen Programmen kann auch mit PowerShell das Datum einer Datei oder eines Ordners geÀndert werden. 


PowerShell: Bildschirmschoner verhindern: Maus regelmĂ€ĂŸig bewegen

Wer die Einstellungen fĂŒr die Bildschirmsperre nicht Ă€ndern kann, kann alternativ regelmĂ€ĂŸig die Maus bewegen, oder die Maus von einem Script bewegen lassen. UrsprĂŒnglich als AutoIt-Script veröffentlicht, habe ich das Script mit ein paar PowerShell-Zeilen nachgebaut. Wer die folgenden Befehle in eine PowerShell-Sitzung kopiert, verhindert, dass sich der Computer sperrt:


AD: Active Directory Daten auslesen

Mit Windows PowerShell Active Directory Objekte auslesen.

Fragen / Kommentare


(sortiert nach Bewertung / Datum) [alle Kommentare(neueste zuerst)]

✍rud
10.04.2022 12:00
Hallo 

Ich bin nur ein Anwender ohne Programmierkenntnisse auf der Suche nach einer Lösung fĂŒr ein "Invoke-WebRequest " zB jede Stunde.
Die entsprechende URL erwartet in regelmĂ€ĂŸigen AbstĂ€nden eingehende HTTP-Anfragen (GET oder POST) gefolgt von von zB. "?param=test" 
Kann sowas auf WinServer oder Win10/11 ĂŒber ein Skript aktiviert und gelöst werden? Wie sieht sowas aus und wie bewerkstellige ich das? 
Über die Win Aufgabenplanung? Habe gelesen, die Policy von ".ps" muss angepasst werden?  Idealerweise, aber nicht zwingend wie ein Dienst im Hintergrund.

Mir scheint das "Invoke-WebRequestRetry" geht genau in dieser Richtung, die ich schon lange nach einer Lösung suche
↳
✍Bernhard
gepostet am 10.04.2022 12:07, geÀndert: 10.04.2022 12:08
Dazu gibt es sicherlich mehrere Möglichkeiten. 
Eine davon wÀre ein Skript, dass in einer Endlosschleife jede Stunde den Request macht: 
Nachteil das Skript muss hĂ€ndisch von einem angemeldeten Benutzer gestartet werden. Stabiler ist wahrscheinlich die Aufgabenplanung. Wenn es nur um den Aufruf geht, ohne dass Daten empfangen werden mĂŒssen, wĂŒrde sogare eine Zeile direkt in der Aufgabenplanung reichen, ĂŒber -executionpolicy Bypass und -command, sowas wie: 
Programm: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Parameter: -ExecutionPolicy Bypass -command "Invoke-WebRequest ..."

Beitrag erstellt von Bernhard