Ablaufsteuerung in Automator-Workflows

Hallo


Ich benutze einen kleinen Automator-Workflow, um einige Shares auf einem lokalen NAS einzuhängen. Das ist sehr einfach und funktioniert auch problemlos.


  - Anweisung 1: Angegebene Server abfragen (mit Serverliste)

  - Anweisung 2: Mit Servern verbinden


Es gibt zwei Situationen, bei denen der Workflow stehen bleibt und eine Fehlermeldung ausgibt, die quittiert werden muß:


Situation 1:

Mindestens eines der Shares war bereits verbunden (z.B. durch vorheriges manuelles Einhängen).


Wie kann man in dem Workflow diesen Fehler erkennen und abfangen?

Der Workflow soll einfach mit dem nächsten Eintrag in der Serverliste weitermachen bis die Serverliste abgearbeitet ist.


Situation 2:

Wird der Workflow automatisch bei Login als Anmeldeobjekt ausgeführt, kann es passieren, dass das NAS noch nicht oder nicht vollständig gestartet ist, d.h. mindestens eines der shares ist nicht im Netzwerk zu finden.


In diesem Falle würde ich gerne den Workflow ohne weitere Fehlermeldung zu Ende laufen lassen und dann zyklisch so lange im Hintergrund laufen lassen, bis die shares im Netzwerk zu finden sind.


Kennt jemand eine Lösung?


--kare--

MacBook Pro 16″, macOS 13.3

Gepostet am 17. Mai 2023 07:56

Antworten
Frage gekennzeichnet als Höchstrangige Antwort

Gepostet am 26. Mai 2023 05:07

Hallo, PreCognition


Danke für Deine Hinweise, die haben mich auf die richtige Spur gebracht. Mußte mich ein wenig in AppleScript einarbeiten (noch nie benutzt), aber dann habe ich eine, nein zwei Lösungen gefunden. Die haben bestimmt noch Verbesserungspotential, aber das ist mir im Moment egal.


Also:


Mit dem Automator eine neue “Schnellaktion” erzeugen. Darin eine einzige Aktion “AppleScript ausführen” anlegen. Das AppleScript besteht im einfachsten Fall aus nur einer Anweisung:


  • mount volume “afp://nasname/sharename“  —  oder
  • mount volume “snb://nasname/sharename“

bzw.

  • mount volume “afp://nasip/sharename“  —  oder
  • mount volume “smb://nasip/sharename“


Ersetze:

nasname durch den richtigen Namen des NAS

nasip durch die korrekte IP-Adresse des NAS

sharename durch den gewünschten share-Namen


Für weitere shares kann je share einfach eine weitere Zeile in das Skript eingebaut werden. Das Automator-Ergebnis als Dienst installieren, und schon hat man es in allen Programm-Menüs zur Verfügung.


Je nachdem, aus welchem App-Menü man den Dienst aufruft, kann folgender Hinweis erscheinen 


„XXXX.app“ möchte Zugriff auf Dateien auf einem Netzwerkvolume.


Der Hinweis kommt nur beim ersten Mal in dieser App, danach hat sich die App die Erlaubnis gemerkt.


Wichtig: Es werden keine Fehlermeldungen erzeugt, und das Skript bricht auch nicht ab, wenn eine “mount”-Zeile auf ein bereits eingehängtes share trifft.


Fehlermeldungen entstehen nur dann, wenn das Netzwerk nicht läuft, oder wenn das NAS abgeschaltet ist. Deshalb ist es auch nur dann ratsam, diese Aktion als “Anmeldeobjekt” zu konfigurieren, wenn man sicherstellen kann, daß das Netzwerk (immer) läuft und das NAS eingeschaltet ist.


Eine sichere Lösung, wenn man das doch als “Anmeldeobjekt” laufen lassen will, ist folgende Version: Ein AppleScript mit dem Script-Editor erstellen und als “Programm” speichern: Das Skript sieht im wesentlichen so aus


-- NAS Check und NAS einhängen
my checkNAS(“MYNAS”)

on checkNAS(ServerIP)
	with timeout of 60 seconds
		try
			set NAS_check to do shell script "ping -c1 " & ServerIP
			if NAS_check contains "0% packet loss" then
				mount volume "smb://MYNAS/share1”
				mount volume "smb://MYNAS/share2”
				--  etc.
				--  etc.
			end if
		on error
			activate
			display alert "MYNAS	— Shares können nicht eingebunden werden!" message "Prüfe ob das NAS eingeschaltet ist — Prüfe ob LAN / WLAN verbunden ist"
			activate
		end try
	end timeout
end checkNAS


Die Anweisungen “with timeout …” und “activate” sind u.U. überflüssig, haben sich aber bei mir als brauchbar herausgestellt.


Man kann das ganze sicherlich noch irgendwie verfeinern, aber das erspare ich mir. Mit dieser Lösung

kann ich sehr gut leben.


Das war's also - ich beende damit das Thema.


Viele Grüße

--- kare ---

Ähnliche Fragen

5 Antworten
Frage gekennzeichnet als Höchstrangige Antwort

26. Mai 2023 05:07 als Antwort auf PreCognition

Hallo, PreCognition


Danke für Deine Hinweise, die haben mich auf die richtige Spur gebracht. Mußte mich ein wenig in AppleScript einarbeiten (noch nie benutzt), aber dann habe ich eine, nein zwei Lösungen gefunden. Die haben bestimmt noch Verbesserungspotential, aber das ist mir im Moment egal.


Also:


Mit dem Automator eine neue “Schnellaktion” erzeugen. Darin eine einzige Aktion “AppleScript ausführen” anlegen. Das AppleScript besteht im einfachsten Fall aus nur einer Anweisung:


  • mount volume “afp://nasname/sharename“  —  oder
  • mount volume “snb://nasname/sharename“

bzw.

  • mount volume “afp://nasip/sharename“  —  oder
  • mount volume “smb://nasip/sharename“


Ersetze:

nasname durch den richtigen Namen des NAS

nasip durch die korrekte IP-Adresse des NAS

sharename durch den gewünschten share-Namen


Für weitere shares kann je share einfach eine weitere Zeile in das Skript eingebaut werden. Das Automator-Ergebnis als Dienst installieren, und schon hat man es in allen Programm-Menüs zur Verfügung.


Je nachdem, aus welchem App-Menü man den Dienst aufruft, kann folgender Hinweis erscheinen 


„XXXX.app“ möchte Zugriff auf Dateien auf einem Netzwerkvolume.


Der Hinweis kommt nur beim ersten Mal in dieser App, danach hat sich die App die Erlaubnis gemerkt.


Wichtig: Es werden keine Fehlermeldungen erzeugt, und das Skript bricht auch nicht ab, wenn eine “mount”-Zeile auf ein bereits eingehängtes share trifft.


Fehlermeldungen entstehen nur dann, wenn das Netzwerk nicht läuft, oder wenn das NAS abgeschaltet ist. Deshalb ist es auch nur dann ratsam, diese Aktion als “Anmeldeobjekt” zu konfigurieren, wenn man sicherstellen kann, daß das Netzwerk (immer) läuft und das NAS eingeschaltet ist.


Eine sichere Lösung, wenn man das doch als “Anmeldeobjekt” laufen lassen will, ist folgende Version: Ein AppleScript mit dem Script-Editor erstellen und als “Programm” speichern: Das Skript sieht im wesentlichen so aus


-- NAS Check und NAS einhängen
my checkNAS(“MYNAS”)

on checkNAS(ServerIP)
	with timeout of 60 seconds
		try
			set NAS_check to do shell script "ping -c1 " & ServerIP
			if NAS_check contains "0% packet loss" then
				mount volume "smb://MYNAS/share1”
				mount volume "smb://MYNAS/share2”
				--  etc.
				--  etc.
			end if
		on error
			activate
			display alert "MYNAS	— Shares können nicht eingebunden werden!" message "Prüfe ob das NAS eingeschaltet ist — Prüfe ob LAN / WLAN verbunden ist"
			activate
		end try
	end timeout
end checkNAS


Die Anweisungen “with timeout …” und “activate” sind u.U. überflüssig, haben sich aber bei mir als brauchbar herausgestellt.


Man kann das ganze sicherlich noch irgendwie verfeinern, aber das erspare ich mir. Mit dieser Lösung

kann ich sehr gut leben.


Das war's also - ich beende damit das Thema.


Viele Grüße

--- kare ---

17. Mai 2023 08:55 als Antwort auf kare

Hallo kare


vielen Dank für deinen Beitrag / deine Frage in der Apple Support Community. 


Zunächst muss / sollte man klären, dass der Automator auf dem macOS-System eine eingeschränkte Fehlerbehandlungsfunktion hat.


Für Situation 1:


Du kannst ein Shell-Skript verwenden, um zu überprüfen, ob die Freigabe bereits eingehängt ist, bevor Du versuchst, sie einzuhängen. Hier ist ein einfacher Workflow:


  • Füge eine neue "Shell-Skript ausführen"-Aktion hinzu.
  • Gebe den folgenden Befehl ein (ersetze "/Volumes/YourShare" durch den Pfad zu deiner Netzwerkfreigabe):
if mount | grep "/Volumes/YourShare" > /dev/null; then
    echo "Already mounted"
else
    echo "Not mounted"
fi 
  • Füge eine "Bedingung prüfen"-Aktion hinzu, die auf den Ausgabewert des Shell-Skripts reagiert. Wenn die Ausgabe "Already mounted" ist, überspringe die Aktion "Mit Server verbinden".


Für Situation 2:


Das ist etwas schwieriger, da das Netzwerk zu dem Zeitpunkt, zu dem das Anmeldeobjekt ausgeführt wird, noch nicht vollständig verfügbar sein könnte.


Ein möglicher Ansatz wäre, das Anmeldeobjekt so zu konfigurieren, dass es ein Shell-Skript ausführt, das den Automator-Workflow zyklisch ausführt, bis alle Netzwerkfreigaben verfügbar sind.


  • Erstelle ein Shell-Skript, das prüft, ob alle Netzwerkfreigaben verfügbar sind. Wenn nicht, führt es den Automator-Workflow aus und wartet dann eine bestimmte Zeit (z.B. 1 Minute), bevor es erneut prüft.
  • Konfiguriere das Anmeldeobjekt, um dieses Skript auszuführen.


Bitte beachte, dass dies nur sehr allgemeine Vorschläge sind und möglicherweise angepasst werden müssen, um deine speziellen Bedürfnisse zu erfüllen.


Liebe Grüße



24. Mai 2023 01:10 als Antwort auf kare

Hallo kare


vielen Dank für deine Zeilen. Mal sehen, wie ich zwischenzeitlich deine Anfrage unterstützen kann, zu der ich natürlich mehr Details benötigen würde, ansonsten kannst Du die weiteren Prozesse ableiten, nutze hierzu Nachfolgendes:


Automator – Benutzerhandbuch für den Mac - Apple Support (DE)


Skripteditor – Benutzerhandbuch für den Mac - Apple Support (DE)

Introduction to AppleScript Language Guide


Ach so, hätte ich beinahe unterschlagen, denn da wäre noch:

Ask questions and discuss development topics with Apple engineers and other developers.

Apple Developer Forums


Aber vorsichtig, der Fachbereich bietet ein erhöhtes Suchtpotential 😉

Liebe Grüße 

26. Mai 2023 05:39 als Antwort auf kare

Hallo kare


es freut mich sehr, dass du Dich der Herausforderung gestellt hast und infolgedessen bereits erste Erfolge verbuchen kannst. Besonders wertvoll finde ich, dass Du die Community an deiner Lösung teilhaben lässt - einfach super 👍


Gerne darfst Du auch deinen Beitrag als Lösung kennzeichnen, dann erscheint diese neben deiner Frage in der Vorschau / der Übersicht.


Liebe Grüße und weiterhin viel Erfolg

Dieser Thread wurde vom System oder dem Community-Team geschlossen. Du kannst alle Beiträge positiv bewerten, die du hilfreich findest, oder in der Community nach weiteren Antworten suchen.

Ablaufsteuerung in Automator-Workflows

Willkommen in der Apple Support Community
Ein Forum, in dem Apple-Kunden sich gegenseitig mit ihren Produkten helfen. Melde dich mit deinem Apple Account an, um Mitglied zu werden.