Applescript + terminal

vicking

Membre confirmé
29 Janvier 2005
18
0
43
Bonjour,

je créé mon premier script applescript et je suis bloqué quasiment à la fin de ce que je veux faire.

Situation: je travaille dans une société qui utilise à 99% du mac. Nous avons installons sur chaque machine un compte admin uniquement utilisable par les informaticiens. Nous souhaitons caché ce compte admin et je suis en train de créé le script pour le faire à distance. Ce script demande à l'utilisateur l'IP de l'ordi distant, avec le terminal on y envoi le fichier du script, on créé une connexion ssh, on exécute le script puis on efface le script de l'ordi distant.

Voici le script:

--affiche une fenêtre de choix
display dialog "Ce script va cacher le compte admin,voulez vous effectuer ce changement sur un ordinateur distant ou sur cet ordinateur?" buttons {"mac distant", "ce mac", "Annuler"} default button 2



--actions si on veut éffectuer le script en local
if the button returned of the result is "ce mac" then
tell application "Terminal"
activate
do shell script "sudo -s dscl . -create /Users/admin UniqueID 401" with administrator privileges
do shell script "sudo chown -R admin /Users/admin/" with administrator privileges
do shell script "sudo defaults write /Library/Preferences/com.apple.loginwindow Hide500Users -bool YES" with administrator privileges
end tell
else



-- actions si on veut effectuer le script sur un ordinateur distant
display dialog "Quel est l'adresse IP de l'ordinateur distant?" default answer "" buttons {"OK"} default button 1

display dialog text returned of the result & "

" & "Il sagit du mac " & "? Etes vous sûr de vouloir continuer?" buttons {"Ok", "Annuler"}

if the button returned of the result is "Ok" then
tell application "Terminal"
activate
do shell script "scp -r haystack admin@" & text returned of the result & ":/Users/admin/Desktop/"
do shell script "ssh admin@" & text returned
do shell script "osascript -l /Users/admin/Desktop/adminhidercomplement.scpt"

end tell
end if
end if


--fonction qui permet d'avoir le chemin du script (pratique quand on change le script de place) et de changer ce chemin pour indiquer le chemin du fichier qui va être copié sur l'ordinateur distant: la variable s'appelera haystack
--Get the paths of all selected files
set strFilePath to {}
tell application "Finder"
repeat with objItem in (get selection)
set end of strFilePath to POSIX path of (objItem as text)
end repeat
end tell


--Copy the file paths to the clipboard
set {strDelimeter, text item delimiters} to {text item delimiters, return}
set the clipboard to strFilePath as text
set text item delimiters to strDelimeter

set haystack to strFilePath
set needle to "extensions/adminhidercomplement.scpt"
set replacement to "Get-scriptdirectory.scpt"
search_replace(haystack, needle, replacement)

on search_replace(haystack, needle, replacement)
set old_delimiters to AppleScript's text item delimiters
set AppleScript's text item delimiters to needle
set temp_list to every text item of haystack
set AppleScript's text item delimiters to replacement
set return_value to temp_list as text
set AppleScript's text item delimiters to old_delimiters
return return_value
end search_replace

display dialog haystack as text with title "Path(s) copied to clipboard" with icon note giving up after 10 buttons {"Close"} default button "Close"
là où le script déconne c'est à la partie "-- actions si on veut effectuer le script sur un ordinateur distant".

Cette partie demande à l'utilisateur de taper l'adresse IP de l'ordinateur distant. Adresse IP stockée dans la variable result. Au préalable, on à créé une variable haystack contenant le chemin où trouver le fichier du script à copier sur l'ordi distant.
Ensuite, on lance l'appli terminal et on lance 3 commandes qui font appelle à ces 2 variables. Problème, ces variables ont été créées dans le script mais pas dans la session du terminal et donc mes commandes terminal ne les connaissent pas. (la partie posant problème est en rouge)

Quelqu'un connait il une solution à ce problème?


J’espère que j'ai été clair dans mes explications. Merci d'avance à ceux qui se pencheront sur mon problème ;).
 
Salut,
il faut insérer les variables dans le do shell script :
par exemple

set machin to quoted form of posix path of file (choose file) -- machin contient le chemin vers un fichier
do shell script "cp " & machin & " ~/Desktop/"


Si tu veux stocker l'ip dans une variable tu fais :

set monIp to text returned of (display dialog "Quel est l'adresse IP de l'ordinateur distant?" default answer "" buttons {"OK"} default button 1)


et donc tu devrais avoir quelque chose dans le genre

do shell script "scp -r haystack admin@" & monIp & ":/Users/admin/Desktop/" -- si haystack est une variable applescript il faut la sortir : "scp -r " & haystack & " admin@" (attention à ne pas oublier les espaces avant/après)
do shell script "ssh admin@" & monIp
do shell script "osascript -l /Users/admin/Desktop/adminhidercomplement.scpt"
 
Dernière édition: