HS n°17 p.7 : Maintenance personnelle

thermoplastiX

Membre confirmé
1 Décembre 2004
21
0
121
Bonjour,

Le script de maintenance donné par J.B. fonctionne parfaitement et a, par rapport aux autres solutions, l'avantage de la simplicité ! (et puis on est content d'avoir bricolé son petit truc :) )

Cependant le fait d'intégrer le mot de passe au script a si je peux me permettre deux inconvénients :
- il existe alors un fichier sur l'ordinateur où le mot de passe est inscrit en clair...
- si on lance le script par erreur, il n'y a pas de moyen direct de le stopper. C'est pas grave mais cela prend tout de même quelques minutes.

En cherchant un peu (je ne connais rien à AppleScript...) j'ai trouvé deux solutions :

1) A la première ligne :
Bloc de code:
set MyPassword to "monmotdepasse"
Ne rien mettre entre les guillemets : c'est alors MacOSX qui se charge de le demander.
L'inconvénient est que si on veut annuler, c'est en tout trois messages d'alerte et une deuxième authentification qu'il faut passer.

2) Remplacer la première ligne par :
Bloc de code:
set temp to display dialog "Maintenance vous demande de taper votre mot de passe :" default answer ""
set MyPassword to text returned of temp
Au lancement du script une boite de dialogue vous demande votre mot de passe, si vous annulez c'est terminé !

Je préfère la deuxième solution même si lorsque l'on saisie le mot de passe celui-ci s'affiche en clair dans le dialogue (mais c'est temporaire !).

Existe-t-il une instruction complémentaire pour que lors de la saisie les caractères soient masqués ?
 
thermoplastiX a dit:
Bonjour,
Existe-t-il une instruction complémentaire pour que lors de la saisie les caractères soient masqués ?

Bonjour

Sous Tiger oui en AppleScript.

Bloc de code:
display dialog "mot de passe:" default answer "" with hidden answer

considering case -- Utile pour différencier les majuscules des minuscules
    -- Ton code
end considering

@+
 
Et voilà le résultat de mes débuts avec AppleScript...

J'ai donc ajouté au script de Joël Barrière la saisie du mot de passe, mais aussi le choix de n'effectuer que les scripts périodiques ou que la réparation des permissions ou bien les deux :p .

Bloc de code:
set temp to display dialog "Maintenance vous demande de taper votre mot de passe :" with icon 1 default answer "" with hidden answer
set MyPassword to text returned of temp
set theError to 0

display dialog "Que voulez-vous faire ?" with icon 1 buttons {"Periodics", "Permissions", "Les deux"} default button 3 giving up after 5
set the button_pressed to the button returned of the result

if the button_pressed is "Periodics" then
	try
		do shell script "periodic daily;periodic weekly;periodic monthly" password MyPassword with administrator privileges
	on error errtext number errNum
		set theError to 1
		display alert "Erreur : " & errNum message errtext
	end try
	
else if the button_pressed is "Permissions" then
	try
		do shell script "diskutil repairPermissions /" password MyPassword with administrator privileges
	on error errtext number errNum
		set theError to 1
		display alert "Erreur : " & errNum message errtext
	end try
	
else if the button_pressed is "Les deux" then
	try
		do shell script "diskutil repairPermissions /" password MyPassword with administrator privileges
	on error errtext number errNum
		set theError to 1
		display alert "Erreur : " & errNum message errtext
	end try
	
	try
		do shell script "periodic daily;periodic weekly;periodic monthly" password MyPassword with administrator privileges
	on error errtext number errNum
		set theError to 1
		display alert "Erreur : " & errNum message errtext
	end try
	
else
	set theError to 2
end if

if theError is 0 then
	display alert "Maintenance terminée."
else if theError is 1 then
	display dialog "Des erreurs sont survenues durant la maintenance." with icon 2 buttons {"OK"} default button 1
else
	display dialog "Maintenance annulée." with icon 2 buttons {"OK"} default button 1
end if
Petite précision : il y a une "temporisation d'abandon" de 5 secondes au moment du choix car le nombre de boutons possibles est limité à trois.

Un grand merci à Avosmac, Joël Barrière et à ceslinstinct pour son petit coup de pouce :) .

Pour ceux qu'AppleScript intéresse, une seule adresse pour de la doc en français et + : http://trad.applescript.free.fr/accueil.html

Ah euh... :siffle: pour une autre bidouille, est-il possible de commander la reconstruction du bureau MacOS9 (Classic) à partir d'AppleScript ou avec une commande de terminal ??? j'ai pas trouvé...
 
thermoplastiX a dit:
Petite précision : il y a une "temporisation d'abandon" de 5 secondes au moment du choix car le nombre de boutons possibles est limité à trois.

Bonjour

Quand j'ai besoin dans un script de plus de 3 boutons, j'utilise une fenêtre en mode liste.

exemple:
Bloc de code:
[color=#0000FF][b]set[/b][/color] [color=#408000]choix[/color] [color=#0000FF][b]to[/b][/color] ""
[color=#0000FF][b]set[/b][/color] [color=#408000]liste_[/color] [color=#0000FF][b]to[/b][/color] {"Ouvrir", "Fermer", "Modifier", "Enregistrer", "Annuler"}
[color=#0000FF]choose from list[/color] [color=#408000]liste_[/color] [color=#0000FF]with prompt[/color] "Votre choix:" [color=#0000FF]default items[/color] {"Annuler"} [color=#0000FF]OK button name[/color] "OK" [color=#0000FF]cancel button name[/color] "Quitter"
[color=#0000FF][b]set[/b][/color] [color=#408000]choix[/color] [color=#0000FF][b]to[/b][/color] [color=#0000FF][b]the[/b][/color] [color=#0000FF]result[/color]

[color=#0000FF][b]if[/b][/color] [color=#408000]choix[/color] [color=#0000FF][b]is[/b][/color] [color=#0000FF][b]not[/b][/color] [color=#0000FF]false[/color] [color=#0000FF][b]then[/b][/color]
	[color=#0000FF]display dialog[/color] [color=#408000]choix[/color]
[color=#0000FF][b]end[/b][/color] [color=#0000FF][b]if[/b][/color]
@+
 
thermoplastiX a dit:
Merci encore ceslinstinct, je prends note :up:

Bonjour

Dans ton script le mot de passe que tu écrit si il est faux, il permet l'utilisation du script au lieu de refuser de continuer.

Mon code à moi, il est pas parfait mais il peut sans doute te donner une idée.

J'ai ajouté les commandes du script par 6 lignes, pour pouvoir utiliser que ce que l'on veut.

Bloc de code:
[color=#0000FF][b]property[/b][/color] [color=#408000]pass[/color] : "ceslinstinct" --[color=#4C4D4D][i] Mot de passe (c'est pas le vrais) il est dans une application compilé donc non visible[/i][/color]
[color=#0000FF][b]property[/b][/color] [color=#408000]mem[/color] : 0 --[color=#4C4D4D][i] Compteur (3 écritures du mot de passe et si mauvais quitte)[/i][/color]
[color=#0000FF][b]property[/b][/color] [color=#408000]MyPassword[/color] : ""
[color=#0000FF][b]repeat[/b][/color]
	[color=#0000FF]display dialog[/color] "Maintenance vous demande de taper votre mot de passe :" [color=#0000FF]with icon[/color] 1 [color=#0000FF]default answer[/color] "" [color=#0000FF][b]with[/b][/color] [color=#0000FF]hidden answer[/color]
	[color=#0000FF][b]copy[/b][/color] [color=#0000FF][b]the[/b][/color] [color=#0000FF]result[/color] [color=#0000FF][b]as[/b][/color] [color=#0000FF]list[/color] [color=#0000FF][b]to[/b][/color] {[color=#408000]MyPassword[/color]}
	[color=#0000FF][b]considering[/b][/color] [color=#0000FF]case[/color]
		[color=#0000FF][b]if[/b][/color] [color=#408000]MyPassword[/color] [color=#0000FF][b]is[/b][/color] [color=#408000]pass[/color] [color=#0000FF][b]then[/b][/color]
			[color=#408000]travail[/color]()
			[color=#0000FF][b]exit[/b][/color] [color=#0000FF][b]repeat[/b][/color]
		[color=#0000FF][b]else[/b][/color]
			[color=#0000FF]beep[/color]
			[color=#0000FF][b]set[/b][/color] [color=#408000]mem[/color] [color=#0000FF][b]to[/b][/color] [color=#408000]mem[/color] + 1
			[color=#0000FF]display dialog[/color] "Mauvais mot de passe" [color=#0000FF]buttons[/color] "OK" [color=#0000FF]default button[/color] 1 [color=#0000FF]with icon[/color] 0 [color=#0000FF]giving up after[/color] 2
			[color=#0000FF][b]if[/b][/color] [color=#408000]mem[/color] [color=#0000FF][b]is[/b][/color] 3 [color=#0000FF][b]then[/b][/color]
				[color=#0000FF][b]exit[/b][/color] [color=#0000FF][b]repeat[/b][/color]
				[color=#0000FF]quit[/color]
			[color=#0000FF][b]end[/b][/color] [color=#0000FF][b]if[/b][/color]
		[color=#0000FF][b]end[/b][/color] [color=#0000FF][b]if[/b][/color]
	[color=#0000FF][b]end[/b][/color] [color=#0000FF][b]considering[/b][/color]
[color=#0000FF][b]end[/b][/color] [color=#0000FF][b]repeat[/b][/color]

[color=#0000FF][b]on[/b][/color] [color=#408000]travail[/color]()
	[color=#0000FF][b]set[/b][/color] [color=#408000]choix[/color] [color=#0000FF][b]to[/b][/color] ""
	[color=#0000FF][b]set[/b][/color] [color=#408000]liste_[/color] [color=#0000FF][b]to[/b][/color] {"Quotidien", "Hebdomadaire", "Mensuel", "Les 3 maintenances", "Permissions", "3 maintenances + Permissions"}
	[color=#0000FF]choose from list[/color] [color=#408000]liste_[/color] [color=#0000FF]with prompt[/color] "Votre choix:" & [color=#0000FF]return[/color] & "Maintenances & Permissions" [color=#0000FF]default items[/color] {"Les 3 maintenances"} [color=#0000FF]OK button name[/color] "OK" [color=#0000FF]cancel button name[/color] "Quitter"
	[color=#0000FF][b]set[/b][/color] [color=#408000]choix[/color] [color=#0000FF][b]to[/b][/color] [color=#0000FF][b]the[/b][/color] [color=#0000FF]result[/color]
	[color=#0000FF][b]if[/b][/color] [color=#408000]choix[/color] [color=#0000FF][b]is[/b][/color] [color=#0000FF][b]not[/b][/color] [color=#0000FF]false[/color] [color=#0000FF][b]then[/b][/color] --[color=#4C4D4D][i] Si c'est pas le bouton Quitter[/i][/color]
		[color=#0000FF]display dialog[/color] [color=#408000]choix[/color] --[color=#4C4D4D][i] A supprimer[/i][/color]
		
		--[color=#4C4D4D][i] ton code[/i][/color]
		
	[color=#0000FF][b]end[/b][/color] [color=#0000FF][b]if[/b][/color]
[color=#0000FF][b]end[/b][/color] [color=#408000]travail[/color]

A voir si cela t'interesse.

@+
 
Salut ceslinstinct,

C'est vrai que dans "mon" script, si on saisie n'importe quoi le script continue. Mais lorsqu'il arrive au moment ou ce mot de passe est vraiment nécessaire, on est a nouveau invité à le saisir par le système (qui est "case sensitive" je crois...) : aucun danger donc ! même si je l'admets, cela manque un peu d'élégance...

Ton script n'a pas ce problème mais ont ne peut pas le refiler à un pote ;)...

Ce qui serait vraiment intéressant c'est de connaître la méthode pour faire tester le mot de passe tout de suite par le système, sans lancer d'opération particulière, avant que le script puisse continuer.

A+ :)
 
thermoplastiX a dit:
Salut ceslinstinct,
Ton script n'a pas ce problème mais ont ne peut pas le refiler à un pote ;)...
A+ :)

Bonjour

Il suffit de donner le script (si c'est un pote) et il écrit son mot de passe et le compile en exécutable uniquement.
Il faut toujours garder une version script au cas ou l'on changerais de mot de passe.

Ton script je suis en train de le modifier pour qu'il travaille à l'allumage de l'ordinateur.
Il contrôle l'année, le mois, la semaine et le jour et fait le travail necessaire.
Comme fait l'ordinateur la nuit, mais moi j'éteind l'ordinateur.

Je lui est ajouté une barre de progression pour me faire patienter si necessaire (et oui ça existe en ApplScript, c'est pas d'Apple).

Je suis en train de faire les tests.

Salut

@+
 
ceslinstinct a dit:
Il suffit de donner le script (si c'est un pote) et il écrit son mot de passe et le compile en exécutable uniquement.
C'était pour les potes qui sont allergiques à la moindre ligne de code ;) (et puis surtout "pour le sport" :p )

Pour le reste je suis impatient de voir le résultat :up:
 
thermoplastiX a dit:
C'était pour les potes qui sont allergiques à la moindre ligne de code ;) (et puis surtout "pour le sport" :p )

Pour le reste je suis impatient de voir le résultat :up:

Bonsoir

Tu peut faire un script compilé en Application exécutable uniquement qui lors de sa première ouverture demande le mot de passe et le garde en mémoire dans une variable Property.

Le défaut c'est que tout le monde peut l'utiliser, c'est valable pour des personnes qui comme moi sont les seuls à utiliser l'ordinateur, ou alors le placer dans un dossier codé avec le compte banquaire ou autres.

Tes potes ne verront pas une ligne de code, mais ils ont intérêt à se souvenir du mot de passe ou alors d'utiliser une copie de l'application pour pouvoir en créer une autre.

Pour ma version, si ça t'intéresse, un MP et je t'envoie le code source.
Cette version risque d'interesser personne, c'est juste pour te montrer ma façon d'utiliser le script que tu as publié.

Cordialement
@+
 
thermoplastiX a dit:
Pour le reste je suis impatient de voir le résultat :up:

Bonjour

Je viens de rajouter 4 compteurs au script, testé sur le système 10.3.9 avec l'OSAX Jon’s Commands.osax pour le chronomètre.
Utilisé ce matin sur le système 10.4.6 sans compteurs.

Quotidien = 00:02:02,52
Hebdomadaire = 00:09:51,75
Mensuel = 00:00:01,30

Temps passé 00:09:55,57

Plus d'un mois sans maintenance.

@+