AppleScript zum Mounten und Unmounten von Laufwerken

AppleScript zum Mounten und Unmounten von Laufwerken

dies ist mein erster Beitrag auf dieser Site. Entschuldigen Sie also, wenn es sich um einen Doppelbeitrag handelt, aber ich konnte nichts Ähnliches finden.

Ich verwende ein MacBook Pro 13 (Anfang 2011), habe eine SSD eingebaut und die Festplatte ins Optibay verschoben und eine Neuinstallation von Yosemite durchgeführt. Auf meiner zweiten Festplatte mit 1 TB speichere ich meine Arbeit und Daten, bevor ich zu Hause ein Backup erstelle.

Ich brauche die Festplatte nicht die ganze Zeit eingebunden und ich muss Energie sparen und sie versteckt halten, also habe ich sie aus der Spotlight-Suche entfernt, „sudo pmset -a disksleep 1“ ausgeführt und zwei Applescripts erstellt, eines, das beim Anmelden gestartet wird, um die Festplatte direkt auszuhängen, und das zweite wird über die Auswurftaste gestartet, die ich mit Karabiner (früher bekannt als KeyRemap4MacBook) geändert habe.

Das zweite Skript startet einen Dialog, der nach einem Passwort fragt und dann fragt, ob ich auf die Festplatte zugreifen möchte. Wenn ja, wird die Festplatte gemountet, wenn nein, wird sie unmountet.

Das Problem ist, dass mir aufgefallen ist, dass, wenn ich mein MacBook herunterfahre, während die Festplatte gemountet ist, sich die Datenträgerkennung für die Festplatte von disk2 auf disk1 ändert und beide Skripte versuchen, die SSD auszuhängen. Daher muss ich die Festplatte manuell auswerfen und neu starten, damit alles wieder normal wird.

Ich möchte das Skript ändern, das über die Auswurftaste gestartet wird, sodass ein erster Dialog geöffnet wird, der genau dem Dialog zum Herunterfahren entspricht. Dabei wird die Schaltfläche „Abbrechen“ entfernt und eine Schaltfläche mit der Bezeichnung „Erweiterung“ (das ist der Name der Festplatte) hinzugefügt.

Ich bin ein Neuling in Sachen Applescript. Folgendes möchte ich also tun: Beispiel

Wenn „Neustart“ gedrückt wird, dann hängen Sie die Festplatte aus und führen Sie einen Neustart durch. Wenn „Ruhezustand
“ gedrückt wird,
dann hängen Sie die Festplatte aus und führen Sie einen Ruhezustand durch. Wenn „Herunterfahren“ gedrückt wird, dann hängen Sie die Festplatte aus und führen Sie ein Herunterfahren durch.
Wenn „Erweiterung“ gedrückt wird, starten Sie das alte Skript

Hier ist mein altes Skript, das neue Skript sollte direkt davor kommen

     set my_password to display dialog ¬
    "Allow access to Expansion" with title ¬
    "Expansion" with icon caution ¬
    default answer ¬
    "" buttons {"Cancel", "OK"} default button 2 ¬
    giving up after 295 ¬
    with hidden answer
if text returned of my_password is "password here" then

    set answer to the button returned of (display dialog "Allow access to Expansion?" with icon caution buttons {"Yes", "No"})

    if answer = "Yes" then
        do shell script "diskutil mountDisk disk2"
        tell application "Notifications Scripting"


            display notification "Expansion" subtitle "is now mounted" sound name "Blow"

        end tell
    else if answer = "No" then
        try

            do shell script "hdiutil eject disk2"

        on error

            tell application "System Events"
                set termOpen to count (processes whose name is "Terminal")
                set amOpen to count (processes whose name is "Activity Monitor")
            end tell


            tell application "Terminal"
                activate
                set newTab to do script "lsof /Volumes/'HFS HD'"
            end tell

            tell application "Activity Monitor"
                activate
            end tell

            delay 3

            set question to display dialog "Kill running?" buttons {"Yes", "No"} default button 2
            set answer to button returned of question

            if answer is equal to "Yes" then
                do shell script "lsof -P | grep '/Volumes/HFS HD'  | awk '{print $2}' | xargs kill -9"
                do shell script "hdiutil eject disk2"
            end if


            tell application "Activity Monitor"
                if amOpen is 0 then
                    quit
                end if
            end tell

            tell application "Terminal"
                if termOpen is 0 then
                    quit
                else
                    close (first window whose selected tab is newTab) saving no
                end if
            end tell



        end try
        tell application "Notifications Scripting"


            display notification "Expansion" subtitle "is now unmounted" sound name "Blow"

        end tell
    end if
else
    tell application "Notifications Scripting"


        display notification "A Goomba killed Mario!" subtitle "Next time, try jumping on it" sound name "Sosumi"

    end tell
    quit

end if

Vielen Dank für Ihre Hilfe und entschuldigen Sie, wenn das Ganze zu lang ist :p

Antwort1

Nach drei Stunden Googeln und Probieren habe ich eine Lösung gefunden.

Das Mounten und Unmounten der Festplatte mit „diskutil mountDisk disk2“ und „hdiutil eject disk2“ war eine SCHLECHTE IDEE, da ich herausgefunden habe, dass sich die Festplattenkennung zufällig ändert, unabhängig davon, ob die Festplatte beim letzten Herunterfahren ausgehängt wurde oder nicht. Daher war das Skript, das ich hinzufügen wollte, nutzlos.

Die Lösung, die ich gefunden habe, war offensichtlich die UUID. Am Anfang konnte ich es nicht richtig zum Laufen bringen, aber nach mehreren Versuchen funktioniert alles problemlos.

Vorgehensweise: Starten Sie das Festplatten-Dienstprogramm. Auf der linken Seite sehen Sie alle Festplatten mit ihren Partitionen. Wählen Sie die Partition aus, für die Sie das Skript erstellen möchten, und klicken Sie oben links auf „Info“. Ein Infofenster wird angezeigt. Stellen Sie sicher, dass es sich um die richtige Partition handelt. In der Infoliste finden Sie (Universal Unique Identifier: eine Reihe von Buchstaben und Zahlen). Das ist die UUID.

Mein endgültiges Skript:

set answer to the button returned of (display dialog “Mount the second HDD?” with icon caution buttons {"Yes", "No"})

if answer = "Yes" then
    do shell script "diskutil mount *YOUR UUID WITHOUT THE ASTERISK* ”

else if answer = "No" then
    try

        do shell script "diskutil unmount *YOUR UUID WITHOUT THE ASTERISK*"

    end try
end if

Mit dem Befehl „Try“ können Sie die Anzeige einer Meldung vermeiden, wenn die Festplatte bereits ausgehängt ist.

Das ist es, einfach und präzise, ​​hoffe, das hilft in Zukunft

verwandte Informationen