RestApi Nextcloud Fehlermeldung bei Ablaufdatum setzen
Moin,
Wir generieren via Powershell eine Freigabe-URL mit Passwort und Ablaufdatum das 30 Tage in der Zukunft liegen soll.
Ich lege das Ablaufdatum in der Variable $ablaufdatum ab und generiere es wie folgt :
baue diese dann in die Generierungszeile wir folgt ein :
Bekomme dann aber leider folgende Fehlermeldung :
Gebe ich das Ablaufdatum nicht als Parameter an, also z.B. '2022-02-28' funktioniert es fehlerfrei.
Wir generieren via Powershell eine Freigabe-URL mit Passwort und Ablaufdatum das 30 Tage in der Zukunft liegen soll.
Ich lege das Ablaufdatum in der Variable $ablaufdatum ab und generiere es wie folgt :
$ablaufdatum=(Get-date).AddDays(30).toString("yyyy-MM-dd")
baue diese dann in die Generierungszeile wir folgt ein :
$response = Invoke-RestMethod -Uri "$oc/ocs/v2.php/apps/files_sharing/api/v1/shares" -Method Post -Headers $headers -Body @{path="Pfad1/Pfad2/$name";shareType=3;password='$password';permissions=1;expireDate='$ablaufdatum'}
Bekomme dann aber leider folgende Fehlermeldung :
Invoke-RestMethod :
failure
404
Ungültiges Datum, zulässiges Datumsformat: JJJJ-MM-TT
In I:\pfad1\gesamt.ps1:122 Zeichen:13
+ $response = Invoke-RestMethod -Uri "$oc/ocs/v2.php/apps/files_sharing ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
Gebe ich das Ablaufdatum nicht als Parameter an, also z.B. '2022-02-28' funktioniert es fehlerfrei.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1742687789
Url: https://administrator.de/forum/restapi-nextcloud-fehlermeldung-bei-ablaufdatum-setzen-1742687789.html
Ausgedruckt am: 22.12.2024 um 08:12 Uhr
10 Kommentare
Neuester Kommentar
Servus,
Bitte den Background dazu lesen : about_Quoting_Rules damit du es auch verstehst.
Ein
reicht hier völlig. Ein setzen in normale Anführungszeichen ist hier ebenfalls unnötig da die Variable sowieso automatisch als eine Einheit dem Hashtable-Parameter zugeordnet wird.
Grüße Uwe
'$ablaufdatum'
Das kann ich dir erklären. Das Setzen in Hochkommas verhindert die Expandierung der Variable, somit ist der String leer und die API beschwert sich deswegen natürlich, außerdem ist dort übrigens auch keine Quoting nötig.Bitte den Background dazu lesen : about_Quoting_Rules damit du es auch verstehst.
Ein
expireDate=$ablaufdatum
Grüße Uwe
password='$password'
Das wird übrigens auch fehlschlagen.Invoke-Restmethod hat da bei manchen Servern so seine Eigenheiten, wenn dieser wirklich den Wert RAW in Anfühungszeichen haben will lässt sich das auch so machen
expireDate="'$ablaufdatum'"
Man nimmt natürlich immer die Doku zur API die man auch nutzt
https://docs.nextcloud.com/server/latest/developer_manual/client_apis/OC ...
Ändert sich was grundlegend sollte es auch dokumentiert werden.
https://docs.nextcloud.com/server/latest/developer_manual/client_apis/OC ...
Ändert sich was grundlegend sollte es auch dokumentiert werden.
Klappt hier im Test mit Nextcloud v23 wie erwartet ohne Anführungszeichen, hätte mich auch ehrlich gesagt sehr gewundert. Mit explizit gesetzten Hochkommata in den Daten geht es nämlich auch explizit nicht. Das expireDate="'$ablaufdatum'" schlägt dann nämlich genau mit der o.g. Fehlermeldung fehl, und ein expireDate="$ablaufdatum" ist das gleiche wie expireDate=$ablaufdatum
Zitat von @Crashzero:
Also bei meinem RestApi Aufruf (V22) klappt das super mit "$password" sowie "$ablaufdatum" ....
Ja klar in der Powershell ist das "$ablaufdatum" das gleiche wie $ablaufdatum, weil in der Powershell bei reiner Variablenübergabe immer alles was in der Variablen steht an den Parameter komplett übergeben wird egal welche Zeichen darin stehen, das könnten auch Leerzeichen sein deswegen sind sie hier und anderswo überflüssig sofern sie nicht mit weiteren Strings kombiniert werden die Leerzeichen/Sonderzeichen enthalten!Also bei meinem RestApi Aufruf (V22) klappt das super mit "$password" sowie "$ablaufdatum" ....
Kannst du übrigens auch gleichh ohne Variable einbauen wenn gewünscht
expireDate=(Get-date).AddDays(30).toString("yyyy-MM-dd")
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen, und Lösungen markieren. Merci.