Version imprimable du sujet

Cliquez ici pour voir ce sujet dans son format original

Forums MacBidouille _ Technologies Apple _ Lancer une commande dans le Terminal (résolu)

Écrit par : Tomeno 3 Oct 2020, 11:37

Je cherche de l'aide pour écrire un petit Applescript qui :
–ouvrirait le terminal
–écrirait une commande dans ce terminal (par exemple : sudo spctl --master-disable , pour télécharger de n'importe où)
–exécuterais la commande
–quitterait le terminal

Merci d'avance de votre aide

Écrit par : radioman 3 Oct 2020, 16:07

basique:
tu lances "éditeur de script"
bouton rouge -> enregistrer
tu fais les manips que tu souhaites enregistrer

Citation
–ouvrirait le terminal
–écrirait une commande dans ce terminal (par exemple : sudo spctl --master-disable , pour télécharger de n'importe où)
–exécuterais la commande
–quitterait le terminal

: l'éditeur tape en lignes de commandes les manips que tu fais
tu stoppes l'enregistrement
(de mémoire) tu doit pouvoir l'enregistrer en tant qu'application autonome …

Écrit par : Tomeno 3 Oct 2020, 18:29

Citation (radioman @ 3 Oct 2020, 17:07) *
bouton rouge -> enregistrer

Merci de tes conseils mais je n'arrive pas à utiliser correctement le bouton d'enregistrement.
Dans l'exemple ci-dessous , du script que j'essaye de mettre au point, je voudrais simplement, à la place de « délai 5 » mettre une commande qui écrirait par exemple ""sudo trimforce enable" ou bien "sudo spctl --master-disable"

tell application "Terminal" to activate
run application "Terminal"
end
delay 5
tell application "Terminal" to quit


et peut-être aussi ajouter une commande qui introduirait mon mot de passe si c'est nécessaire pour valider l'opération ???

Écrit par : Zeltron54 4 Oct 2020, 08:39

Bonjour,

Un exemple de script qui te demande de choisir d'autoriser l'installation de logiciel de "n'importe où" pour une durée de 1 ou 5 minutes puis remet l'autorisation sur "app store et developeurs"
Il faut changer "Ton mot de passe" par ton mot de passe de la session

Code
set nameList to {"Autoriser n'importe où pour 1 minute", "Autoriser n'importe où pour 5 minutes", "App Store et developpeurs"}

set choix to (choose from list the nameList with prompt "Sélectionner : " with title "Choix") as string
if choix is "false" then quit -- Bouton Annuler

set commande to "echo " & "Ton mot de passe" & " | sudo -S spctl --master-"
set ledelai to 0
if choix is "Autoriser n'importe où pour 1 minute" then
    set ledelai to 60
end if
if choix is "Autoriser n'importe où pour 5 minutes" then
    set ledelai to 300
end if
set tout to commande & "disable"
do shell script tout

delay ledelai
set fini to commande & "enable"
do shell script fini

Écrit par : Tomeno 4 Oct 2020, 17:28

Citation (Zeltron54 @ 4 Oct 2020, 09:39) *
Bonjour,
Un exemple de script qui te demande de choisir d'autoriser l'installation de logiciel de "n'importe où" pour une durée de 1 ou 5 minutes puis remet l'autorisation sur "app store et developeurs"
Il faut changer "Ton mot de passe" par ton mot de passe de la session

Merci pour ton message. J'ai testé ton script qui marche effet très bien. Mais cela ne résout pas mon problème. Mon problème est de savoir ce qu'il faut écrire, dans le script ci-dessous, juste avant « délai 3 » pour que je puisse écrire quelque chose dans le terminal.
je cherche la syntaxe à utiliser pour dire : Write « telle chaîne de caractères » dans la fenêtre du terminal que je viens d'ouvrir, et ensuite ajoute un Return pour valider.
(Peut-être aussi rajouter une 2e ligne pour introduire mon mot de passe et valider par un Return)

tell application "Terminal" to activate
run application "Terminal"

delay 3

end
tell application "Terminal" to quit


merci d'avance à celui qui me dépannera

Écrit par : Zeltron54 4 Oct 2020, 17:57

Bonsoir,

Mais pour écrire et exécuter une commande dans le terminal depuis le script, Tu envoies directement ta commande avec le script avec la commande "do shell script", c'est pour ça que je t'ai mis l'exemple.
Tu n'a pas besoin d'appeler le terminal ni de l'activer ni de valider, la commande "do shell script" fait tout ça..
Tu mets ce que tu veux écrire dans le terminal dans une variable exemple:"macommande" et tu envoies avec : do shell script macommande, si la commande doit s'exécuter avec le mot de passe tu tu la précèdes avec : "echo " & "Ton mot de passe" & " | suivi de ta commande, comme je l'ai fait dans mon exemple.

Écrit par : Tomeno 6 Oct 2020, 08:56

Alors la,Zeltron, tu m'ouvre des horizons insoupçonnés !
Je vais m'attaquer à tout cela avec tes conseils. Merci

Écrit par : Jaypee 6 Oct 2020, 09:27

Salut tous,

Il manque une commande qui supprime les privilèges administratifs, car tout utilisateur mal intentionné qui fait tourner ce script gagne ces privilèges et les garde pour faire n'importe quelle autre commande potentiellement dangereuse:

La commande est :

Code
sudo -k
à ajouter à la fin du script.

JP

Écrit par : baron 20 Apr 2023, 18:08

Je vois que le sujet avait déjà été abordé précédemment. Je joins les deux. wink.gif

+++++++++++++++

Je ne suis pas trop calé en scripts mais il me semble que la ligne suivante devrait faire ce que tu veux, sans devoir activer le Terminal :

Code
do shell script "echo " & "motdepasse" & " | sudo lasuitedetacommande"

(En remplaçant motdepasse et lasuitedetacommande par les paramètres appropriés.
Sans oublier les guillemets qui encadrent les éléments de chaîne, concaténés par l'opérateur &, formant la commande shell à exécuter.)

— Merci à Zeltron54 qui avait déjà exposé tout cela https://forum.macbidouille.com/index.php?showtopic=418256&view=findpost&p=4348348. wink.gif

Écrit par : Zeltron54 20 Apr 2023, 20:34

Bonsoir,

Je suppose que le script que je t'avais fait ne te convient pas car le mot de passe est écrit dans le script et que tu préfères le saisir , alors voila le script modifié.

Code
set nameList to {"Autoriser n'importe où pour 1 minute", "Autoriser n'importe où pour 5 minutes", "App Store et developpeurs"}

set choix to (choose from list the nameList with prompt "Sélectionner : " with title "Choix") as string
if choix is "false" then quit -- Bouton Annuler

display dialog "Entrer votre le mot de passe administrateur :" default answer "" with hidden answer
set MDP to text returned of result

set commande to "echo " & MDP & " | sudo -S spctl --master-"
set ledelai to 0
if choix is "Autoriser n'importe où pour 1 minute" then
    set ledelai to 60
end if
if choix is "Autoriser n'importe où pour 5 minutes" then
    set ledelai to 300
end if
set tout to commande & "disable"
do shell script tout

delay ledelai
set fini to commande & "enable"
do shell script fini
do shell script "sudo -k"

Dis moi si cela te convient !

Écrit par : baron 20 Apr 2023, 23:11

Des fois, on est pris par autre chose et on laisse un ouvrage en chantier, en oubliant qu'on avait déjà progressé dessus… wink.gif


Écrit par : Tomeno 22 Apr 2023, 09:45

Citation (Zeltron54 @ 20 Apr 2023, 21:34) *
Je suppose que le script que je t'avais fait ne te convient pas car le mot de passe est écrit dans le script et que tu préfères le saisir , alors voila le script modifié.

Dis moi si cela te convient !


Cela me convient «presque» bien et je te remercie vraiment beaucoup. J'ai toutefois fait les modifications suivantes pour que cela corresponde à ce que je voulais vraiment:Voila le script et il y a l'air de fonctionner !

Code

     set nameList to {"Autoriser les téléchargements depuis n'importe où", "N'autoriser que ceux de App Store et de ses developpeurs"}
    
     set choix to (choose from list the nameList with prompt "Votre choix S.V.P. : " with title "Autorisations des téléchargements") as string
     if choix is "false" then quit -- Bouton Annuler
    
     display dialog "Entrer votre le mot de passe administrateur :" default answer "" with hidden answer
     set MDP to text returned of result
    
     set commande to "echo " & MDP & " | sudo -S spctl --master-"
    
     if choix is "Autoriser les téléchargements depuis n'importe où" then
         set tout to commande & "disable"
         do shell script tout
     end if
     if choix is "N'autoriser que ceux de App Store et de ses developpeurs" then
         set fini to commande & "enable"
         do shell script fini
     end if
     do shell script "sudo -k"
    
     display dialog "Le résultat ne sera visible qu'après avoir relancé les Préférences Système"buttons "OK" default button "OK"
     quit

Dis moi si ce n'est pas trop stupide ?

Écrit par : Zeltron54 23 Apr 2023, 06:44

Bonjour,

La commande "quit" à la fin ne peut pas fonctionner car le script est en cours d'exécution !

Je trouve que d'avoir supprimer le délai est une mauvaise idée, car tu enlèves une sécurité pour pouvoir installer un logiciel, mais si tu oublis de la remettre ton mac reste ouvert à l'installation de n'importe quoi !...

C'est toi qui voit. wink.gif

Écrit par : Tomeno 23 Apr 2023, 07:46

Citation (Zeltron54 @ 23 Apr 2023, 07:44) *
La commande "quit" à la fin ne peut pas fonctionner car le script est en cours d'exécution !
Je trouve que d'avoir supprimer le délai est une mauvaise idée, car tu enlèves une sécurité pour pouvoir installer un logiciel, mais si tu oublis de la remettre ton mac reste ouvert à l'installation de n'importe quoi !...

J'ai donc enlevé la commande « quit » et ça marche aussi bien. Concernant la suppression des limitations dans le temps tu as probablement raison. Il faudrait peut-être, en faite, donner 3 possibilités :Par contre un bogue que je ne sais pas corriger : si on entre un mauvais mode passe on voit apparaître le message ci-dessous, dans lequel, si on clique sur «modifier », ça ouvre le script dans l'éditeur de script. Ceci se produit même si le script a été transformé en application. Il faudrait trouver un truc pour que en cas de mauvais mot de passe il n'y ait pas la possibilité d'accéder au script. Mais ça je ne sais pas le faire

Écrit par : Zeltron54 23 Apr 2023, 08:02

Bonjour,

Il devrait suffire d'intercepter l'erreur et de mettre un dialogue "erreur de mot de passe"
je te met ton script avec juste la modification pour intercepter l'erreur, cela se passe dans un bloc "try" "on error "end try'
Toute erreur qui se produit entre le "try" et le "end try" provoque la réalisation de se qui est dans "on error"

Code
set nameList to {"Autoriser les téléchargements depuis n'importe où", "N'autoriser que ceux de App Store et de ses developpeurs"}
    
    set choix to (choose from list the nameList with prompt "Votre choix S.V.P. : " with title "Autorisations des téléchargements") as string
    if choix is "false" then quit -- Bouton Annuler
    
    display dialog "Entrer votre le mot de passe administrateur :" default answer "" with hidden answer
    set MDP to text returned of result
    
    set commande to "echo " & MDP & " | sudo -S spctl --master-"
    try
        if choix is "Autoriser les téléchargements depuis n'importe où" then
            set tout to commande & "disable"
            do shell script tout
        end if
        if choix is "N'autoriser que ceux de App Store et de ses developpeurs" then
            set fini to commande & "enable"
            do shell script fini
        end if
        do shell script "sudo -k"
    on error
        display dialog "Erreur de Mot de Passe ! "
    end try
    
    display dialog "Le résultat ne sera visible qu'après avoir relancé les Préférences Système" buttons "OK" default button "OK"
    quit


Je te met la version avec les 3 possibilités et avec la bloc erreur..

Code
set nameList to {"Autoriser les téléchargements depuis  n'importe où", "Autoriser n'importe où pour 5 minutes", "N'autoriser que  ceux de App Store et de ses developpeurs"}
  
   set choix to (choose from list the nameList with prompt "Sélectionner : " with title "Choix") as string
   if choix is "false" then quit -- Bouton Annuler
  
   display dialog "Entrer votre le mot de passe administrateur :" default answer "" with hidden answer
   set MDP to text returned of result
  
   set commande to "echo " & MDP & " | sudo -S spctl --master-"
   try
       set ledelai to 0
       if choix is "Autoriser n'importe où pour 5 minutes" then
           set tout to commande & "disable"
           do shell script tout
           delay 300
           set fini to commande & "enable"
           do shell script fini
       end if
      
       if choix is "Autoriser les téléchargements depuis n'importe où" then
           set tout to commande & "disable"
           do shell script tout
       end if
      
       if choix is "N'autoriser que ceux de App Store et de ses developpeurs" then
           set fini to commande & "enable"
           do shell script fini
       end if
      
   on error
       display dialog "Erreur de Mot de Passe ! "
   end try
  
   do shell script "sudo -k"
  display dialog "Le résultat ne sera visible qu'après avoir relancé les Préférences Système" buttons "OK" default button "OK"

Dis moi si cela te convient.

Écrit par : Tomeno 23 Apr 2023, 15:02

Oui c'est très bien. Je te remercie beaucoup de ton aide

Propulsé par Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)