Funktion akzeptiert keinen Zeitstempel als Parameter - was mache ich falsch ?
Hallo erfahrenere Powershell Scripter,
ich arbeite gerade mit eine API die ein Abfragelimit vom 100 Abfragen/min hat.
Im ersten Schritt habe ich mir meine aktuelle Abfragerate errechnet:
Da ich diesen Codeblock mehrfach verwende, wollte ich das in eine Funktion auslagern.
Wenn ich jetzt allerdings die Funktion aufrufe mit
Bekomme ich die Meldung:
Hier stehe ich aktuell auf dem Schlauch und habe keine Idee wie ich das Problem lösen kann.
Es wäre toll wenn mir hier jemand aufs Pferd helfen könnte.
Grüße vom it-frosch
ich arbeite gerade mit eine API die ein Abfragelimit vom 100 Abfragen/min hat.
Im ersten Schritt habe ich mir meine aktuelle Abfragerate errechnet:
$startzeit = get-Date
$request_count = 0
$rate_limit = 90
ForEach ($dat in $ergebnis) {
...
# Rate Limit auswerten
# aktuellen Zeitstempel ermitteln
$laufzeit = get-Date
# falls noch kein API Request ausgeführt auf 1 setzen
if ($request_count -eq 0) {$request_count = 1}
# Zeitdifferenz errechnen
$zeitdiff = New-TimeSpan -Start $startzeit -End $laufzeit
# falls Zeitdifferenz 0 ergibt auf 30 sek setzen
if ($zeitdiff.totalseconds -eq 0) {$zeitdiff.totalseconds = 30}
# Abfragen pro min errechnen
$rate = [math]::Round(($request_count/($zeitdiff.totalseconds/60)),2)
# Pause von 20 sek einfügen wenn aktuell Rate größer als Limit
if ($rate -ge $rate_limit) {
Write-Log -text "Das Rate Limit von $($rate_limit) Abfragen pro min wurde erreicht und das Script pausiert jetzt 20s."
Write-Log-Main -text "Das Rate Limit von $($rate_limit) Abfragen pro min wurde erreicht und das Script pausiert jetzt 20s."
Start-Sleep -Seconds 20
}
else
{
Write-Log -text "Die Abfragerate beträgt $rate Abfragen pro min, das Limit beträgt 100."
Write-Log-Main -text "Die Abfragerate beträgt $rate Abfragen pro min, das Limit beträgt 100."
}
API Request
}
Da ich diesen Codeblock mehrfach verwende, wollte ich das in eine Funktion auslagern.
function rate_ermitteln([Datetime]$startzeit,$request_count) {
# Rate Limit auswerten
$laufzeit = get-Date
if ($request_count -eq 0) {$request_count = 1}
$zeitdiff = New-TimeSpan -Start $startzeit -End $laufzeit
if ($zeitdiff.TotalSeconds -eq 0) {$zeitdiff.TotalSeconds = 30}
$rate = [math]::Round(($request_count/($zeitdiff.TotalSeconds/60)),2)
# Pause von 20 sek einfügen
if ($rate -ge $rate_limit) {
Write-Log -text "Das Rate Limit von $($rate_limit) Abfragen pro min wurde erreicht und das Script pausiert jetzt 20s."
Write-Log-Main -text "Das Rate Limit von $($rate_limit) Abfragen pro min wurde erreicht und das Script pausiert jetzt 20s."
Start-Sleep -Seconds 20
}
else
{
Write-Log -text "Die Abfragerate beträgt $rate Abfragen pro min, das Limit beträgt 100."
Write-Log-Main -text "Die Abfragerate beträgt $rate Abfragen pro min, das Limit beträgt 100."
}
Wenn ich jetzt allerdings die Funktion aufrufe mit
rate_ermitteln($startzeit,$request_count)
Bekomme ich die Meldung:
rate_ermitteln : Die Argumenttransformation für den Parameter "startzeit" kann nicht verarbeitet werden. Der Wert "System.Object[]" vom Typ "System.Object[]" kann nicht in den Typ
"System.DateTime" konvertiert werden.
In Zeile:30 Zeichen:23
+ rate_ermitteln($startzeit,$request_count)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (:) [rate_ermitteln], ParameterBindingArgumentTransformationException
+ FullyQualifiedErrorId : ParameterArgumentTransformationError,rate_ermitteln
Hier stehe ich aktuell auf dem Schlauch und habe keine Idee wie ich das Problem lösen kann.
Es wäre toll wenn mir hier jemand aufs Pferd helfen könnte.
Grüße vom it-frosch
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 82300924084
Url: https://administrator.de/contentid/82300924084
Ausgedruckt am: 03.12.2024 um 17:12 Uhr
6 Kommentare
Neuester Kommentar
Eigene Funktionen werden in PS anders aufgerufen, nämlich wie cmdlets, also so
Oder mit ParameterNennung
Mit deiner Klammerung machst du die beiden Variablen nämlich zum Inhalt des ersten Parameters, deswegen auch die Meldung von wegen Object[] im ersten Parameter.
😉
Gruß
rate_ermitteln $startzeit $request_count
rate_ermitteln -startzeit $startzeit -request_count $request_count
Mit deiner Klammerung machst du die beiden Variablen nämlich zum Inhalt des ersten Parameters, deswegen auch die Meldung von wegen Object[] im ersten Parameter.
😉
Gruß
Mal was anderes:
wieso übergibst du Request_Count als Variable, der Sinn der Funktion ist doch, dass genau die den Request_Count ermittelt.
wieso übergibst du Request_Count als Variable, der Sinn der Funktion ist doch, dass genau die den Request_Count ermittelt.