crashzero
Goto Top

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 :

$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.

Content-Key: 1742687789

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

Printed on: April 26, 2024 at 04:04 o'clock

Member: colinardo
colinardo Jan 20, 2022 updated at 10:11:38 (UTC)
Goto Top
Servus,
'$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
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
Member: Crashzero
Crashzero Jan 20, 2022 at 10:12:50 (UTC)
Goto Top
Moin, auch ohne Hochkomma hatte ich es probiert, also ohne alles wie du beschrieben hattest, gleiches Problem.

Hab das grade mal wir "" gesetzt, damit geht es, keine Ahnung warum es vollkommen ohne Zeichen nicht geht.
Member: colinardo
colinardo Jan 20, 2022 updated at 10:17:40 (UTC)
Goto Top
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'"  
Das gilt es halt auszuprobieren bzw. in der Doku nachzuschlagen, und im Zweifel mit Wireshark nachprüfen.
Member: Crashzero
Crashzero Jan 20, 2022 at 10:17:32 (UTC)
Goto Top
Jo, hab festgestellt das es wohl kleine RestApi Unterschiede schon alleine von V22 zu V23 gibt, kann das sein ?
Member: colinardo
colinardo Jan 20, 2022 updated at 10:20:56 (UTC)
Goto Top
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.
Member: Crashzero
Crashzero Jan 20, 2022 at 10:21:58 (UTC)
Goto Top
Danke dir.....
Member: colinardo
colinardo Jan 20, 2022 updated at 10:37:32 (UTC)
Goto Top
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
Member: Crashzero
Crashzero Jan 20, 2022 at 10:37:04 (UTC)
Goto Top
Also bei meinem RestApi Aufruf (V22) klappt das super mit "$password" sowie "$ablaufdatum" ....
Member: colinardo
colinardo Jan 20, 2022 updated at 10:45:53 (UTC)
Goto Top
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!

Kannst du übrigens auch gleichh ohne Variable einbauen wenn gewünscht
expireDate=(Get-date).AddDays(30).toString("yyyy-MM-dd")
Kommt ebenfalls auf das Selbe drauf raus.

Wenns das dann war, den Beitrag bitte noch auf gelöst setzen, und Lösungen markieren. Merci.
Member: Crashzero
Crashzero Jan 20, 2022 at 14:57:33 (UTC)
Goto Top
Jup, danke dir.
Bereits "gelöst".