Cambiar un disco de inicio usando AppleScript

1

He intentado usar AppleScript para cambiar mi disco de inicio para Boot Camp y Mac. Anteriormente, he intentado usar el terminal (hacer shell script) pero parece que esa opción requiere que ingrese una contraseña administrativa.

Entonces:

  1. ¿Cómo puedo hacer que pueda recuperar la contraseña? Puedo usar llaveros.
  2. ¿Cómo programo el terminal AppleScript / use a través de AppleScript para:
    • vaya a Preferencias del sistema / inícielo si aún no está abierto
    • vaya al panel de preferencias del Disco de inicio
    • configure el disco de arranque en Windows / Mac y tenga la opción de apagar / reiniciar. (Me gustaría poder tener un solo script para manejar todo, incluso si estoy reiniciando MacOS, o si apago y usaré Windows más adelante, etc.)

Gracias de antemano! (PD: he intentado buscar algunas respuestas y hay una muy buena respuesta here en StackOverflow pero no parece funcionar en Sierra. Además, las otras respuestas que he encontrado en SO y Ask Different no funcionan.)

Los dos conjuntos de código que probé (primero usando Preferencias del Sistema, segundo usando Terminal, ambos 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

(Insertar contraseña aquí se refiere a la clave genérica. Lo que encontré:

  • al ejecutar el comando en la terminal sin barras diagonales, el comando funciona y me da la contraseña asignada, incluidas las comillas como esta "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

Necesito poder desbloquear las Preferencias del Sistema, preferiblemente usando la misma contraseña de llavero que mencioné en el primer script. El segundo comando tell application "System Events" to tell process "System Preferences" to click button "Restart..." no funciona.

    
pregunta Brick 04.10.2016 - 06:43

1 respuesta

1

En mi entorno, el script funciona como se esperaba. Aunque utilicé un nombre diferente para la clave genérica: boot_key

Los atributos de boot_key:

Lacontraseñaes,evidentemente,tambiénlacontraseñadeiniciodesesióndeklanomath.seguridadsiempreestápermitidousarlaclave

ParadepurarelscriptdeApple,habilite"Mostrar registro" con cmd3

El guión:

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

luego mostrará (después de elegir "Macintosh HD") en la parte "Respuestas":

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"

Puede registrar varias variables explícitamente agregando log $variable líneas (que es redundante con las "Respuestas" en algunos casos):

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

que luego revela:

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 como captura de pantalla:

Ahora debería poder detectar el error en su secuencia de comandos o en su entorno.

    
respondido por el klanomath 04.10.2016 - 17:38

Lea otras preguntas en las etiquetas