Modifica di un disco di avvio tramite AppleScript

1

Ho provato ad usare AppleScript per cambiare il mio disco di avvio per Boot Camp e Mac. In precedenza ho provato a utilizzare il terminale (faccio script di shell) ma sembra che quell'opzione mi richieda di inserire una password amministrativa.

Quindi:

  1. Come faccio a renderlo tale da poter recuperare la password? Posso usare i portachiavi.
  2. Come posso programmare AppleScript / utilizzare Terminal tramite AppleScript per:
    • vai in Preferenze di Sistema / avvialo se non è già aperto
    • vai al pannello delle preferenze del disco di avvio
    • imposta il disco di avvio su Windows / Mac e ha l'opzione di spegnimento / riavvio. (Mi piacerebbe essere in grado di avere un singolo script per gestire tutto anche se sto riavviando in macOS, o spegnendo e utilizzerò Windows in seguito, ecc.)

Grazie in anticipo! (PS Ho provato a cercare alcune risposte e c'è una buona risposta qui su StackOverflow ma sembra non funzionare su Sierra. Anche le altre risposte che ho trovato su SO e Ask Different non funzionano.)

I due set di codice che ho provato (primo usando le Preferenze di Sistema, il secondo usando Terminal, entrambi usando AppleScript):

display dialog "Select a startup disk" buttons ¬
    {"BOOTCAMP", "Macintosh HD"}
if button returned of the result = "BOOTCAMP" then
set bootVol to "BOOTCAMP" as text
else if button returned of the result = "Macintosh HD" then
    set bootVol to "Macintosh HD" as text
end if

do shell script "security 2>&1 >/dev/null find-generic-password -gl \"Insert Password Here\" | awk '{print $2}'"
set myPass to (text 2 thru -2 of result) as text

do shell script "bless -mount \"/Volumes/" & bootVol & ¬
    "\" -setBoot" user name "username" password myPass with administrator privileges

do shell script "shutdown -r now" user name "username" password myPass with administrator privileges

(Inserisci password qui si riferisce alla chiave generica. Cosa ho trovato:

  • quando si esegue il comando nel terminale senza barre rovesciate il comando funziona e mi dà la password assegnata includendo le virgolette come questa "Password"
tell application "System Preferences"
    activate
    set the current pane to pane id "com.apple.preference.startupdisk"
    get the name of every anchor of pane id "com.apple.preference.startupdisk"
end tell

try
    tell application "System Events" to tell process "System Preferences" to click button "BOOTCAMP Windows" of radio group 1 of scroll area 1 of group 1 of splitter group 1 of window 1
end try

try
    tell application "System Events" to tell process "System Preferences" to click button "Restart..."
end try

Devo essere in grado di sbloccare le Preferenze di Sistema, preferibilmente usando la stessa password del portachiavi che ho menzionato nel primo script. Il secondo comando tell application "System Events" to tell process "System Preferences" to click button "Restart..." non funziona.

    
posta Brick 04.10.2016 - 06:43
fonte

1 risposta

1

Nel mio ambiente lo script funziona come previsto. Però ho usato un nome diverso per la chiave generica: boot_key

Gli attributi di boot_key:

Lapasswordèauto-evidentementeanchelapassworddiaccessodiklanomath.sicurezzaèsemprepermessousarelachiave!

PereseguireildebugdelloscriptAppleabilitare"Mostra registro" con cmd 3

Lo script:

display dialog "Select a startup disk" buttons ¬
    {"BOOTCAMP", "Macintosh HD"}
if button returned of the result = "BOOTCAMP" then
    set bootVol to "BOOTCAMP" as text
else if button returned of the result = "Macintosh HD" then
    set bootVol to "Macintosh HD" as text
end if

do shell script "security 2>&1 >/dev/null find-generic-password -gl \"boot_key\" | awk '{print $2}'"
set myPass to (text 2 thru -2 of result) as text

do shell script "bless -mount \"/Volumes/" & bootVol & ¬
    "\" -setBoot" user name "klanomath" password myPass with administrator privileges

do shell script "echo \"shutdown -r now\"" user name "klanomath" password myPass with administrator privileges

mostrerà quindi - dopo aver scelto "Macintosh HD" - nella parte "Risposte":

tell application "Script Editor"
    display dialog "Select a startup disk" buttons {"BOOTCAMP", "Macintosh HD"}
        --> {button returned:"Macintosh HD"}
end tell
tell current application
    do shell script "security 2>&1 >/dev/null find-generic-password -gl \"boot_key\" | awk '{print $2}'"
        --> "\"Passw0rd\""
    do shell script "bless -mount \"/Volumes/Macintosh HD\" -setBoot" user name "klanomath" password "Passw0rd" with administrator privileges
        --> ""
    do shell script "echo \"shutdown -r now\"" user name "klanomath" password "Passw0rd" with administrator privileges
        --> "shutdown -r now"
end tell
Result:
"shutdown -r now"

Puoi registrare varie variabili in modo esplicito aggiungendo log $variable lines (che in alcuni casi è ridondante con "Risposte"):

display dialog "Select a startup disk" buttons ¬
    {"BOOTCAMP", "Macintosh HD"}
if button returned of the result = "BOOTCAMP" then
    set bootVol to "BOOTCAMP" as text
else if button returned of the result = "Macintosh HD" then
    set bootVol to "Macintosh HD" as text
end if
log bootVol

do shell script "security 2>&1 >/dev/null find-generic-password -gl \"boot_key\" | awk '{print $2}'"
set myPass to (text 2 thru -2 of result) as text
log myPass

do shell script "bless -mount \"/Volumes/" & bootVol & ¬
    "\" -setBoot" user name "klanomath" password myPass with administrator privileges
log bootVol
log myPass

do shell script "echo \"shutdown -r now\"" user name "klanomath" password myPass with administrator privileges
log myPass

che poi rivela:

tell application "Script Editor"
    display dialog "Select a startup disk" buttons {"BOOTCAMP", "Macintosh HD"}
        --> {button returned:"Macintosh HD"}
end tell
(*Macintosh HD*)
tell current application
    do shell script "security 2>&1 >/dev/null find-generic-password -gl \"boot_key\" | awk '{print $2}'"
        --> "\"Passw0rd\""
    (*Passw0rd*)
    do shell script "bless -mount \"/Volumes/Macintosh HD\" -setBoot" user name "klanomath" password "Passw0rd" with administrator privileges
        --> ""
    (*Macintosh HD*)
    (*Passw0rd*)
    do shell script "echo \"shutdown -r now\"" user name "klanomath" password "Passw0rd" with administrator privileges
        --> "shutdown -r now"
    (*Passw0rd*)
end tell

o come screenshot:

Ora dovresti essere in grado di rilevare l'errore nel tuo script o nel tuo ambiente.

    
risposta data 04.10.2016 - 17:38
fonte

Leggi altre domande sui tag