Von PowerShell zu AppleScript?

ObiTobi

ObiTobi

Aktives Mitglied
Thread Starter
Dabei seit
05.11.2009
Beiträge
1.536
Reaktionspunkte
91
Moin,
ich überlege gerade wieder einen Mac zu kaufen. Die meiste Programme die ich nutze gibt es sowohl in der Windows wie auch Mac Version, daher hier habe ich kein Proiblem.

Etwas anders sieht es mit meinen eigenen Sachen - Scripte die ich verwende um z.B meine Bilder von Speicherkarten auf die Platte zu kopieren, Aktuell habe ich keinen Mac um das alles auszuprobieren, daher vielleicht weiß jemand etwas mehr.
Es gibt wohl PowerShell auch für Mac. Damit werden (vor etlichen Jahren war es zumindest so) nicht alles oder zumindest deutlich anderes zu realisieren sein.
Ich erstelle z.B mit meinem Script eine virtuelle Platte die max Größe von 500GB haben kann ( das ist die Größe von den CF-Express Karten die ich verwende) und mache erst mal ein 1:1 Backup der Karte dahin. Bei Mac gibt es (damals zumindest) keine vhdx Disks sondern da heizen die meine ich dmg o.ä Damit wird der Aufruf auch etwas anders sein usw.
Hier erst mal so einige globale Fragen

Kann ich aus einem PowerShell Script AppleScript Rotinen/ Befehle/ Scripte aufrufen?
Gibt es vielleicht einen Konverter PowerShell<-> AppleScript (Google Suche hat nichts brauchbares ergeben)
Wird AppleScript nach wie vor Vollumfänglich Unterstützt? (Vor Jahren meine ich zumindest gab es ein Gerücht, dass Apple AppleScript aufgeben und durch was anderes ersetzen will
Kann ich und wenn ja wie, freien Platz von einem Laufwerk/ Speicherkarte abfragen? (So für den Fall, dass ich doch mein Script komplett neu machen muss)

(Weitere/ detaillierte Fragen kommen sicherlich wenn ich sicher bin, dass ich wieder Mac kaufe, bzw ihn bestellt habe. Hier nur "verfüllen" wie kompliziert/ aufwändig es an einigen Stellen wieder sein wird)
 
Es gibt auch noch das viel mächtigere Shell Script in der Bash / Zsh.

Und AppleScript kann auch Shell Scripte ausführen.
 
Neben Apple Script hat macOS auch noch Automator und Kurzbefehle/Shortscuts. Die können vielleicht auch, was du möchtest.
 
Kann ich aus einem PowerShell Script AppleScript Rotinen/ Befehle/ Scripte aufrufen?
...
Wird AppleScript nach wie vor Vollumfänglich Unterstützt?
Als Ebenfalls-Umsteiger kann ich dazu sagen:
  • Applescript ist eine komplette Enttäuschung
Spielkram im Vergleich zu allem, was man von Windows kennt, VBA, PowerShell, whatever.
Abstruse Syntax, funktioniert so halb oder kann es gar nicht.

Eine mächtigere Alternative sind die traditionellen UNIX-Shells bash bzw. Mac-Standard zsh.
Die Syntax ist allerdings nicht mit Powershell zu vergleichen und -ahem- sehr gewöhnungsbedürftig.

Überraschend gute Erfahrungen habe ich allerdings mit Microsoft's Visual Studio für Mac gemacht.
Ganz gewohnte Denkweise und compiliert nativ für Mac.

Sollte wohl auch mit Visual Studio Code klappen.

Siehe auch dort:
 
Das AppleScript eine Enttäuschung ist kann ich nicht nachvollziehen, man kann damit auch Umfangreiches bauen.

Mein Dumper zum Beispiel ist eine Kombination aus Apple- und Shellscript.

Einzig bessere Gestaltungsmöglichkeit von Dialogen würde ich mir wünschen, da gibt es aber auch Erweiterungen. (Wobei ich bis jetzt mehr auf die Funktion wie die Optik Wert lege).

Allerdings tendiere ich inzwischen mehr dazu Dinge in ShellScript zu tun wie in AppleScript, da ich direkt(er) auf alle CLI Tools zugreifen kann.

Bei mir ist das der historische Hintergrund das ich mal vor 100 Jahren mit Pascal angefangen hab. Da findet man in AS Vieles wieder.
 
kann ich nicht nachvollziehen
Das ist so ähnlich wie:

Wenn ich in Deutschland aufgewachsen bin, dann weiß ich, was was mich erwartet, wenn ich Sonntags zum Kaffee eingeladen werde:
  • ein fein eingedeckter Tisch mit mehreren (Sahne-)Torten etc. pp
Wenn ich dann nach 'olland umziehe und dort Sonntags zum Kaffee eingeladen werde:
  • dann darf ich auf dem Sofa Platz nehmen und bekomme 1 (!!) Tasse Kaffee und 1 (!!) trockenen Keks serviert.

Die 'ollanders finden das lekker gezellig, ich bin eher enttäuscht.
Verstehst du, was ich meine? Alles 'ne Frage der Perspektive und gar nicht bös' gemeint.
 
Probier doch so was:
https://codepal.ai/language-translator/powershell-to-bash
Abgesehen davon sind die Windows CLI Tools eh anders und man muss vieles umschreiben, wenn man nicht gerade WSL nutzt.
Und selbst dann haben die BSD Tools teils andere Optionen als die GNU Tools auf Linux.

Ich versteh das Applescript Bashing auch nicht, das ist nun mal eher Umgangssprache statt Leetspeech31337.
 
Zuletzt bearbeitet:
Danke erst mal für die Antworten.

Ich hatte schon mal einen Mac und damals ~15 Jahre zurück habe ich mein damaliges Perl Script nach AppleScript umgeschrieben. Dank kräftiger Unterstützung hier im Forum.
Daraus ist etwas entstanden was zwar funktionierte aber mir persönlich nie wirklich gefallen hat. Eine Mischung aus AppleScript und Bash. Ich habe mich schon lange von 8.3 Zeichen bei Verzeichnissen, Dateinamen verabschiedet und damit ging es los. AppleScript braucht andere Maskierung als Shell. Mit Shell gingen Sachen wie "erstelle eine Virtuelle Platte" nicht. Dafür musste man dann doch AppleScript, weil eben doch ein wenig näher am OS als Shell.

das ist nun mal eher Umgangssprache
Ja das ist ist wohl wahr. Und ich glaube oft verwirrt das "tell application Bla...." Da muss man sich darauf einlassen.
 
Die Powershell gibt es auch für macOS.
 
Die Shell ist näher am OS als AppleScript.

Beides kann ich kombinieren, wenn ich Unixoide Pfade brauche dann gibt's posix path in AS.
 
Die Powershell gibt es auch für macOS.
hatte ich eben oben auch geschrieben. Nur damit kann ich nicht alles abdecken.

Die Shell ist näher am OS als AppleScript.
Wie erhalte ich über Bash - Namen von der Speicherkarte die gerade gemounted ist?
eides kann ich kombinieren
Ja kann man. Mir persönlich hat es damals nicht besonders gut gefallen. Aber sicherlich ist das Geschmacksache. Auf jedem Fall - kein NoGo
 
Wie erhalte ich über Bash - Namen von der Speicherkarte die gerade gemounted ist?
Musst entweder filtern oder als Parameter übergeben.
Du startest das Script ja nicht aus der leeren Luft heraus.
Hier wäre ein Folder Action der Auslöser.
 
Du startest das Script ja nicht aus der leeren Luft heraus.
Do genau das tue ich.
Ich starte mein Script ohne Parameter ohne nichts. Es geht hin und an einer Stelle ermittelt es den Namen der Speicherkarte und in Abhängigkeit davon kopiert die Bilder in unterschiedliche Pfade.

In meinem alten AppleScript war die Stelle etwa so: (habe die Namen der Speicherkarten an die aktuell vorhandene angepasst)

Code:
set cardName to ""
set cardNames to {"EOSR5-001", "EOSR5-002", "EOSR5-003", "EOSR5-004", "EOSR6-001", "EOSR6-002", "EOSR6-003", "EOSR6-004", "EOSR7-001", "EOSR7-002", "EOSR7-003", "EOSR7-004"}

tell application "Finder"
    repeat with cardName in cardNames
        set sourceDrive to sourceDrive & (disks whose name contains (get cardName))
    end repeat
    set sourceDrive to name of item 1 of sourceDrive
end tell

Wie ich geschrieben habe - mich hat die Mischung aus AppleScript und Shell nicht begeistert, somit wäre ich persönlich entweder für nur für das eine oder andere. Und da im Raum steht, dass die Shell näher an OS ist als AppleScript ... kam die Frage von mir. wie ich das ermitteln kann.
Obwohl ich mich für den Mac noch nicht entschieden habe, kann ich schon einiges Vorbereiten.
 
Edit: gelöscht … muss noch mal das Script genauer anschauen

So ... aus meiner Sicht kann Dein Script gar nicht funktionieren.

AppleScript:
set cardNames to {"Macintosh HD", "My Book Thunderbolt Duo1", "EOSR5-001", "EOSR5-002", "EOSR5-003", "EOSR5-004", "EOSR6-001", "EOSR6-002", "EOSR6-003", "EOSR6-004", "EOSR7-001", "EOSR7-002", "EOSR7-003", "EOSR7-004"}

set sourceDrive to {}

tell application "Finder"
    repeat with cardName in cardNames
        set sourceDrive to sourceDrive & (disks whose name contains cardName)
    end repeat
    set firstSourceDrive to name of item 1 of sourceDrive
end tell

So läuft es mal grundsätzlich. Funktionierte aber erst, als ich sourceDrive als Liste deklarierte. Sonst gab es einen Fehler, weil sourceDrive beim Verketten im ersten Schleifendurchlauf leer war. (Aber was willst Du mit dem Namen der Disk? Baust Du damit dann einen Pfad? Brauchst Du dann nicht eher einen Pfad als den Namen des Laufwerks?)
Das (get cardName) kannst Du Dir auch sparen. Du iterierst ja schon über die Liste, und hast cardName ja im Schleifendurchlauf.

Wie steht's denn so um allgemeine Programmierkenntnisse bei Dir?
 
Zuletzt bearbeitet:
Wie erhalte ich über Bash - Namen von der Speicherkarte die gerade gemounted ist
indem du diskutil list auswertest, über das Format, die Größe oder über weitere Informationen die auch über Diskutil kommen.

wie immer bei Standard CLI tools weitere Informationen über

man diskutil
 
  • Gefällt mir
Reaktionen: mausfang
In meinem alten AppleScript war die Stelle etwa so:
Da sind die Volumenames ja hardcoded.
Das ist ja noch einfacher, da musst nur testen, ob die gemountet ist oder der mount point existiert.
In Bash ja so in der Art test -d /Volumes/EOS
 
Yep, und wenn man mit den Dingern was machen will kann man wildcards benutzen.

cp /Volumes/EOS* ~/Pictures

so als ersten Ansatzpunkt, mehr Sinn macht rsync.
 
Um Bilder von der Speicherkarte auf die Festplatte zu kopieren nehme ich Digitale Bilder mit einer angehängten Automator Aktion. Karte in den Rechner, dem Programm Digitale Bilder „importieren“ sagen, schwupp liegen die Bilder auf Platte mit lecker Datum in den Dateinamen integriert und pro Aufnahmetag ein Ordner. Hab ich jetzt verpennt, das es mittlerweile Automator nicht mehr gibt? Anyway, was soll denn mit einem Shellscript nicht gehen? Die einzige Einschränkung ist, das man wissen muss, was man will. twimc.
 
So ... aus meiner Sicht kann Dein Script gar nicht funktionieren.
Natürlich nicht. Es ist nicht mein Script sondern nur ein "Schnipsel" bei dem ich vergessen habe wirklich für den Teil alle notwendige Variablen mitzupacken.

OK muss ich gucken was ich für Informationen wirklich dabei rausbekomme
Um Bilder von der Speicherkarte auf die Festplatte zu kopieren nehme ich Digitale Bilder
So etwas habe ich weder unter Linux, damals Mac oder später Windows genommen.
Ist nicht Sache für jeden, ich stecke etwas Energie in ein Script welches genau meine use cases abdeckt und denke nie wieder darüber nach.
n Bash ja so in der Art test -d /Volumes/EOS
OK mal schauen ob ich das bei meinem Rentner verifizieren kann wo/ wie genau die Karten gemounted werden.
Es ist schon zu lange her, aber ich meine da gab es ein Grund warum es an der Stelle über Finer/ AppleScript läuft

Danke schon mal für die Antworten. Mal schauen vielleicht setze ich mich hin und bastle was von meinem PowerShell nach Bahs. Vielleicht/ vermutlich kommt dann auch der Grund warum damals es eine Mischung aus AppleScript/ Shell geworden ist.
 
AppleScript kommt noch aus einer Zeit da es Sprachen wie REXX (OS/2) und AREXX (Amiga) gab. Den Ansatz muß man mögen. Ich mag die natürliche Sprache darin nicht, weil ich länger brauche die Logik dahinter zu erfassen. Wem es anders geht, der ist damit fein bedient, wenn Programme miteinander interagieren sollen.

Die Powershell ist auch recht "schwafelig" viele Befehle dort sind sehr lang und man muß sich schon genau an die Schreibweise erinnern. Das hat aber den Hintergrund, dass die ungleich mehr kann. Man kann direkt auf Shell Ebene auf Objekte von Anwendungen zugreifen. Eine SQL Abfrage in der Powershell vom lokalen SQL Server? Kein Problem, mal kurz das AD befragen? Ja, geht.
Für mich, der ich selten Windows nutze bedeutet es, dass es dort ein Werkzeug gibt was so mächtig ist das ich schon für kleine Aktionen ständig die Hilfe frequentieren muß. Die Einstiegshürde ist recht hoch - für mich. Wer es täglich nutzt, wird das überwinden und in der Powershell Möglichkeiten finden, die nie eine Shell zuvor....

Meine Shell der Wahl ist die bash oder zsh. Warum? Weil ich schon in den 1980 und 90er Jahren UNIX Rechner in den Fingern hatte. Ja auch bei der sh/bash/zsh sind die Einstiegshürden nicht ohne. So manche der 2-3 Buchstabenbefehle und ihre 720 Optionen zu lernen ist mühselig. Dabei leistet sie viel, was die Powershell auch kann. Nur bleibt sie Textstrombasiert und nicht Objektbasiert wie die Powershell. Für mich hat sich das Shell wissen hier über Jahrzehnte kummuliert und dieses Wissen ist und war nachhaltig. Gerade bei Microsoft mußten wir alle erfahren wie schnell man dort Dinge verwirft und neu in den Raum wirft. Komplette Neuschulungen, neue Wissensnachweise ... davon lebt eine ganze Industrie. Ich für mich habe es daher aufgegeben dort Zeit zu investieren. Die Halbwertzeit des Gelernten war mir zu gering UND ich habe die Windows Anwendung zu selten.

Wenn jemand von der Powershell zur Unix Shell kommt, wird er darüber auch nicht glücklich sein. Statt klarer englischer Texte merkwürdige Akronyme. Einige Dinge finden ein Äquivalent, andere eben nicht. Bei AppleScript ist es umgekehrt, die klare Sprache findet sich hier wieder. Die Leistung ist aber eher die eines REXX Systems und bei weitem nicht die einer Powershell oder zsh.
 
  • Gefällt mir
Reaktionen: HJOrtmann und ruerueka
Zurück
Oben Unten