2009-09-03 13 views
3

J'ai fait de mon mieux pour trouver une solution aux nombreuses questions de script sur Stack Overflow et sur Internet, mais je n'arrive pas à trouver la solution dont j'ai besoin. Ce que je veux faire est de créer une solution plus automatisée et moins cliquable pour enlever tous les comptes d'utilisateur mis en cache par Mobile sur un système. Je me suis connecté et je suis allé manuellement aux comptes d'utilisateurs et j'ai supprimé les utilisateurs un à la fois en cliquant sur le bouton "-", puis en cliquant sur "Supprimer immédiatement" pour les données de l'utilisateur. Cela fonctionne, mais cela prend du temps et j'ai de meilleures choses à faire avec mon temps. Donc je savais qu'il devait y avoir un moyen de le faire avec un script.Exécution d'un script avec des permissions d'administrateur sur OS X

Je couru à travers ce code:

for cuser in `dscl . -list /Users AuthenticationAuthority | grep LocalCachedUser | awk '{print $1}' | tr '/n' ' '`; do 
    dscl . -delete /Users/$cuser 
done 

Si je cours dans le terminal ce que j'obtiens des erreurs d'autorisation. J'ai donc pensé que je devais le faire avec sudo. J'ai donc commencé à chercher des AppleScript pour lancer le script, mais je n'arrive pas à trouver la bonne façon de le faire.

Des idées? En passant, je suis nouveau sur les scripts sur Mac, alors s'il vous plaît commentez votre code afin que je sache ce qui se passe, et donc je ne fais pas juste du code de script sans savoir ce que ça va faire. :)

Merci

Répondre

5

Pour exécuter un script shell avec sudo ou privilèges d'administrateur append with administrator privileges à la fin de votre ligne do shell script. Par exemple:

do shell script "/path/to/script/file.sh" user name "adminusershortname" password "password" with administrator privileges 

Vous pouvez trouver plus sur technote d'Apple face à do shell script

Cela dit, sauver cela comme un script shell et exécuter le script shell en utilisant sudo fonctionnerait tout aussi bien.

#! /bin/sh 

for cuser in `/usr/bin/dscl . -list /Users AuthenticationAuthority | grep LocalCachedUser | awk '{print $1}' | tr '/n' ' '`; do 
    /usr/bin/dscl . -delete /Users/$cuser 
done 

Enregistrer comme dire removeUser.sh, utilisez chmod pour le définir comme exécutable (chmod 755), puis l'exécuter (sudo ./removeUser.sh)

+0

J'ai essayé de l'exécuter dans un script Apple, mais maintenant je reçois tout un tas de "delete: Invalid Path", que je suppose être pour chaque utilisateur qu'il essaie de supprimer. Le fichier AppleScript est sur le bureau. Est-ce que ça doit être un autre endroit? Dois-je donner à la commande delete un chemin plus valide? – ScottN

+0

J'ai enlevé le "| tr '/ n' '" "de la commande comme exécution de la commande de liste dans le terminal a été l'impression d'utilisateurs très bizarre. Mais maintenant j'ai un autre problème. Lorsque j'ai exécuté AppleScript la première fois et que je n'ai pas eu d'erreur, j'ai supposé que cela fonctionnait. La vérification de la liste des comptes dans les préférences système répertorie toujours les utilisateurs, de sorte que la suppression n'a pas complètement supprimé les comptes d'utilisateurs du système. Mais si j'exécute à nouveau la commande list, aucun utilisateur n'est imprimé dans la fenêtre Terminal, donc le script n'a plus rien à faire. Qu'est-ce que je fais mal maintenant? La commande "dscl -delete" fait-elle la même chose que l'interface graphique? – ScottN

+0

Ok, ils apparaissaient encore dans les préférences du système jusqu'à ce que j'ai redémarré le système, alors ils n'étaient plus là. J'ai dû supprimer manuellement les dossiers d'utilisateur. Mais cela ne nécessite que quelques clics. Je pourrais être satisfait de cela. Ce serait bien de supprimer le dossier des utilisateurs en même temps. – ScottN

0

Je n'ai un mac pratique je ne peux pas vérifier si cela fonctionnerait.

Essayez de lancer su -

Ensuite, l'exécution de votre script. Si cela fonctionne, essayez crontab -e

et d'ajouter une entrée pour exécuter votre script.

Êtes-vous familier avec crontab? Eh bien, si ce n'est pas google, si besoin est. Mais au fond de courir tous les jours à minuit, vous auriez quelque chose comme 0 * * * */path/to/script

Voir: http://en.wikipedia.org/wiki/Cron

+0

Pourriez-vous mieux construire votre réponse? Je ne suis pas sûr de ce que "su -" est. Est-ce juste sudo pour faire court? – ScottN

+0

su est l'abréviation de "utilisateur de remplacement". Il vous permet de vous connecter en tant que root à partir d'un terminal. –

2

Vous pouvez le faire en éditant le fichier sudoers de votre système. Cela permettra au compte que vous utilisez pour exécuter ce script (via cron, etc.) la possibilité d'exécuter sudo sans mot de passe.

Pour éditer le fichier sudoers, vous utilisez visudo, mais il doit être exécuté avec l'autorisation de l'administrateur.Essayez:

$ sudo visudo 

Ajoutez une ligne comme suit à la fin du fichier, en remplaçant user_name avec l'utilisateur qui exécutera votre script. Notez, utilisez des onglets entre chaque champ.

user_name ALL=(ALL)  NOPASSWD:ALL 

Maintenant, nom_utilisateur devrait être capable de taper sudo et ne sera pas invité à entrer un mot de passe.

Notez également que visudo est un éditeur de texte qui reflète l'éditeur vi et utilise les mêmes commandes que vi.