SMB
Übersicht
Abschnitt betitelt „Übersicht“Die Aktion SMB arbeitet mit Dateien auf Windows-Netzwerkfreigaben (\\server\freigabe\ordner, z. B. ein NAS oder ein Dateiserver) und in Ordnern auf diesem PC. Sie kopiert, verschiebt, listet Dateien auf oder löscht sie. Quelle und Ziel können beliebig kombiniert werden: vom PC auf die Freigabe, von der Freigabe auf den PC oder von einer Freigabe auf eine andere.
Damit das zuverlässig klappt, macht die Aktion Folgendes:
- Anmeldung nur, wenn nötig. Ohne
Usergreift RUNOS mit dem angemeldeten Windows-Benutzer zu, wie der Explorer. MitUserundPasswordmeldet sich RUNOS für die Dauer der Aktion an jeder beteiligten Freigabe an und danach wieder ab. Bestehende Verbindungen von Windows (Explorer, Netzlaufwerke) werden nie getrennt. - Kopien werden unter einem vorläufigen Namen geschrieben (
name.part), über die Größe geprüft und erst dann umbenannt. Ein Datei-Trigger, der den Zielordner überwacht, sieht nie eine halbe Datei. - Verschieben innerhalb derselben Freigabe bzw. desselben Laufwerks ist ein Umbenennen: sofort fertig, auch bei großen Dateien, und nie halb erledigt. Sonst wird zuerst kopiert und geprüft; die Quelle wird erst danach gelöscht.
- Eine fehlerhafte Datei hält die anderen nicht auf. Am Ende schlägt die Aktion fehl, wenn eine Datei fehlgeschlagen ist oder die Anmeldung nicht geklappt hat. Wie bei jeder Aktion endet dann der Lauf oder die Fehlerbehandlung des Workflows greift (z. B. drei Wiederholungen mit
RetryThenNotify). - Fehlende Ordner am Ziel werden angelegt. Versteckte Dateien und Systemdateien (
desktop.ini,Thumbs.db) werden übergangen.
Im Workflow-Editor stellen Sie die Aktion in einem Formular zusammen und probieren sie mit Schritt testen aus.
Struktur
Abschnitt betitelt „Struktur“{ "Type": "SMB", "Name": "RechnungAblegen", "Parameters": { "Operation": "Copy", "Source": "{{FilePath}}", "Destination": "\\\\nas\\buchhaltung\\Rechnungen\\%yyyy%", "User": "{{connector.NAS.Username}}", "Password": "{{connector.NAS.Password}}" }}In JSON wird jeder \ verdoppelt: "\\\\nas\\buchhaltung" steht für \\nas\buchhaltung.
| Parameter | Standard | Bedeutung |
|---|---|---|
Operation |
Copy |
Copy (kopieren), Move (verschieben), List (auflisten) oder Delete (löschen) |
Source |
– | Was kopiert, verschoben, aufgelistet oder gelöscht wird, siehe unten. Pflicht. |
Destination |
– | Copy/Move: der Zielordner, auf diesem PC (C:\Archiv) oder auf einer Freigabe (\\nas\archiv). Pflicht. |
Filter |
* |
Ist Source ein Ordner: nur diese Dateien, z. B. *.pdf;*.xml |
Recursive |
false |
Unterordner einbeziehen; ihre Struktur bleibt am Ziel erhalten |
IfExists |
Overwrite |
Die Zieldatei gibt es schon: Overwrite (überschreiben), Skip (überspringen, zählt als Skipped), Rename (beide behalten: die neue heißt name (2).pdf, name (3).pdf …) oder Error (zählt als Fehler) |
NewName |
– | Copy/Move: Name der Datei am Ziel. Kennt %filename%, %filenamewithoutextension%, %extension% (der jeweiligen Datei) sowie %yyyy%, %MM%, %dd%, %HH%, %mm%, %ss%. |
User |
– | Benutzer für die Freigaben: DOMÄNE\benutzer, benutzer@domäne oder bei einem NAS einfach benutzer. Leer = der angemeldete Windows-Benutzer. |
Password |
– | Passwort zu User |
Source ist eine Datei, ein Ordner oder ein Muster, auf diesem PC oder auf einer Freigabe; mehrere getrennt durch ;:
- Datei:
{{FilePath}}oder\\nas\eingang\auftrag.xml - Ordner:
\\nas\eingang: seine Dateien, die zuFilterpassen (mitRecursiveauch die der Unterordner) - Muster:
\\nas\eingang\*.xml
Eine Datei oder ein Ordner, den es nicht gibt, ist ein Fehler; ein Muster, zu dem nichts passt, nicht. Source kann auch eine Liste sein, etwa die Dateien eines Triggers oder {{DateienAuflisten.Response.Files}} einer vorherigen List-Aktion.
Delete löscht nur Dateien, nie Ordner. List listet die Dateien auf.
Platzhalter in Pfaden: {{FilePath}}, {{InitialData…}}, Konnektoren und %yyyy%, %MM%, %dd% (z. B. \\nas\archiv\%yyyy%\%MM%) werden vor dem Lauf ersetzt.
Anmeldung
Abschnitt betitelt „Anmeldung“User und Password gelten nur für Netzwerkpfade (\\server\freigabe\…). Für Laufwerksbuchstaben wie Z:\ kann RUNOS keinen Benutzer setzen; verwenden Sie dafür den UNC-Pfad der Freigabe.
Windows erlaubt pro Server nur eine Anmeldung zur selben Zeit. Ist Windows mit dem Server schon unter einem anderen Benutzer verbunden (etwa über ein Netzlaufwerk im Explorer), passiert Folgendes:
- Kommt diese Verbindung an die Freigabe, verwendet RUNOS sie und schreibt eine Warnung ins Ergebnis.
- Sonst schlägt die Aktion mit einer entsprechenden Meldung fehl. Trennen Sie dann die andere Verbindung (
net use) oder sprechen Sie den Server unter einem anderen Namen an, z. B. mit seiner IP-Adresse (\\192.168.1.20\archiv).
Laufen mehrere Workflows gleichzeitig mit derselben Freigabe, teilen sie sich die Anmeldung; sie müssen dann denselben Benutzer verwenden.
Ergebnis
Abschnitt betitelt „Ergebnis“"Response": { "Results": [ { "Source": "C:\\RUNOS\\Spooler\\…\\RE-2026-0001.pdf", "Destination": "\\\\nas\\buchhaltung\\Rechnungen\\2026\\RE-2026-0001.pdf", "Size": 48211, "Status": "OK", "Message": "" } ], "SuccessCount": 1, "SkippedCount": 0, "ErrorCount": 0},"Meta": { "Host": "PC-01", "User": "BUERO\\scanner", "Shares": [ "\\\\nas\\buchhaltung" ]}Status ist OK, Skipped (gibt es schon, IfExists: Skip) oder Error mit dem Grund in Message. Destination ist die Datei, die wirklich geschrieben wurde (mit IfExists: Rename also z. B. RE-2026-0001 (2).pdf). List liefert die Dateien stattdessen in Files, jede mit Name, Path, Size (Bytes) und Modified. Eine folgende Aktion liest sie als {{DateienAuflisten.Response.Files}}, z. B. in einem Loop.
Formular im Editor
Abschnitt betitelt „Formular im Editor“Im Diagramm des Workflow-Editors hat die Aktion ein Formular (im Einstellungsfeld und in der mittleren Spalte der Testansicht):
- Vorgang Copy, Move, List oder Delete; Quelle; Zielordner (beim Kopieren und Verschieben); Filter; Unterordner einbeziehen.
- Wenn die Datei existiert: Überschreiben, Überspringen, Beide behalten (umbenennen) oder Fehler; Neuer Name mit
%filename%,%yyyy%usw. - Anmeldung: Benutzer (
DOMÄNE\benutzeroderbenutzer@domäne; leer = der Windows-Benutzer) und Passwort.
Jedes Feld nimmt auch {{…}}-Platzhalter und Werte, die Sie in der Testansicht aus der Spalte Eingabe hineinziehen; Auswahllisten, Schalter und Zahlenfelder werden mit einem {{…}} zu einem Textfeld. Parameter, die das Formular nicht kennt, stehen unter Weitere Parameter. Schritt testen führt die Aktion sofort einmal aus, mit den Daten der Schritte davor, und zeigt das Ergebnis mit Fehlern und Warnungen. Der Test kopiert, verschiebt oder löscht wirklich. Mit List sehen Sie in der Ausgabe unter Response.Files, was in der Freigabe liegt.
Beispiel
Abschnitt betitelt „Beispiel“Jede Rechnung auf dem NAS ablegen. Ein Datei-Trigger nimmt jedes PDF aus dem Exportordner und kopiert es in einen Ordner pro Jahr auf dem NAS. Gibt es die Datei dort schon, bleiben beide erhalten. Drei Wiederholungen, falls das NAS kurz nicht erreichbar ist:
{ "Name": "Rechnungen ablegen", "Autostart": true, "Trigger": { "Type": "File", "Name": "Export", "Parameters": { "Pool": "C:\\Export\\Rechnungen", "Filter": "*.pdf" } }, "Actions": [ { "Type": "SMB", "Name": "Ablegen", "OnErrorPolicy": { "Strategy": "RetryThenNotify", "MaxRetries": 3, "InitialDelaySeconds": 30 }, "Parameters": { "Operation": "Copy", "Source": "{{FilePath}}", "Destination": "\\\\nas\\buchhaltung\\Rechnungen\\%yyyy%", "IfExists": "Rename", "User": "{{connector.NAS.Username}}", "Password": "{{connector.NAS.Password}}" } } ]}Jede Nacht Scans einsammeln. Alle PDFs aus dem Scan-Ordner der Freigabe auf diesen PC holen und dort entfernen (Move), mit Datum im Namen. Weil Kopien unter einem vorläufigen Namen ankommen, sieht ein Workflow, der C:\Import\Scans überwacht, nur vollständige Dateien:
{ "Name": "Scans einsammeln", "Autostart": true, "Trigger": { "Type": "Time", "Name": "Nachts", "Parameters": { "CronExpression": "0 0 2 * * ?" } }, "Actions": [ { "Type": "SMB", "Name": "Einsammeln", "Parameters": { "Operation": "Move", "Source": "\\\\fileserver\\scans\\*.pdf", "Destination": "C:\\Import\\Scans", "NewName": "%yyyy%-%MM%-%dd%_%filename%", "User": "{{connector.Fileserver.Username}}", "Password": "{{connector.Fileserver.Password}}" } } ]}