2009-09-03 22 views
3

私は、スタックオーバーフローとインターネットに関する多くのスクリプトに関する質問がある解決策を見つけるために最善を尽くしましたが、必要な解決策を見つけることができません。OS Xの管理者権限でスクリプトを実行する

私がしたいことは、システム上のすべてのモバイルキャッシュされたユーザーアカウントを削除するための、より自動化されたソリューションを作成することです。私はログインしていて、手動でユーザーアカウントに行き、 " - "ボタンをクリックしてから一度に1つずつユーザーを削除してから、ユーザーデータの "すぐに削除"をクリックしています。これは機能しますが、時間がかかり、私は自分の時間とより良いことがあります。だから私はスクリプトでこれを行う方法がなければならないことを知っていた。

私は、このコードに出会っ:

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

私はターミナルでこれを実行すると、私は権限エラーが発生します。だから私はsudoで実行する必要があると思った。だから私はスクリプトを実行するためにAppleScriptsを作ることに目を向け始めましたが、私はそれを行う正しい方法を見つけることができないようです。

アイデア?ちなみに、私はMacでスクリプトを書くのが初めてだから、コードを書き留めておいてください。何が起こっているのか分かりますので、スクリプトのコードを実行するだけで何をするのか分かりません。 :)

おかげ

答えて

5

do shell script行の末尾にwith administrator privilegesと入力します。たとえば:

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

あなたは、言っdo shell script

を扱うシェルスクリプトとしてこれを保存し、同じようにうまくいくでしょうsudoを使用してシェルスクリプトを実行しているAppleの技術情報の詳細を見つけることができます。それ保存

#! /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 

+0

私はリンゴスクリプトで実行しようとしましたが、削除しようとしている各ユーザのために「削除:無効なパス」がたくさんあります。 AppleScriptファイルはデスクトップにあります。他の場所にする必要がありますか? deleteコマンドにもっと有効なパスを与える必要がありますか? – ScottN

+0

ターミナルでlistコマンドを実行しているときに、コマンドから "| tr '/ n' ''"を削除しました。しかし、今私は別の問題があります。 AppleScriptを初めて実行したときにエラーが発生しなかったので、私はそれがうまくいっていると思いました。システム環境設定のアカウント一覧を確認すると、ユーザーの一覧が表示されるため、削除によってユーザーアカウントがシステムから完全に削除されることはありません。しかし、再度listコマンドを実行すると、ターミナルウィンドウにユーザーが表示されないので、スクリプトには何も実行されません。私は今何が間違っていますか? "dscl。-delete"コマンドはGUIと同じ働きをしていますか? – ScottN

+0

私はシステムを再起動するまでシステム設定にまだ表示されていましたが、もはやそこにはありませんでした。手動でユーザーフォルダを削除する必要がありました。しかし、それはほんの数回のクリックを必要とします。私はこれに満足するかもしれません。ユーザーフォルダを同時に削除するといいでしょう。 – ScottN

0

私はこれが機能するかどうので、私は確認できない便利なマックを持っていません。次に、あなたのスクリプトを実行している

-

は suコマンドを実行してみてください。それが機能する場合は、 crontab -e

を試して、あなたのスクリプトを実行するためのエントリを追加してください。

crontabに精通していますか?もし必要ならばそれはGoogleではない。 しかし、基本的には毎日深夜にそれを実行するために、あなたは 0 * * * * /パス/に/スクリプト

参照のようなものがあるだろう:sudoまたは管理者権限が追加でシェルスクリプトを実行するにはhttp://en.wikipedia.org/wiki/Cron

+0

あなたの答えをより良く構成できますか?私は "su - "が何であるか分かりません。それはちょうど短いsudoですか? – ScottN

+0

suは「代替ユーザー」の略です。ターミナルからrootとしてログインすることができます。 –

2

は、あなたがお使いのシステムのsudoersファイルを編集することによってこれを行うことができます(sudo ./removeUser.sh)removeUser.shは、実行可能(chmod 755)として設定し、それを実行するためにchmodを使用言うように。これにより、このスクリプトを実行するために使用するアカウント(cronなどを介して)がパスワードなしでsudoを実行できるようになります。

sudoersファイルを編集するにはvisudoを使用しますが、admin権限で実行する必要があります。試してみてください:

$ sudo visudo 

は、スクリプトを実行するユーザーにUSER_NAMEを交換し、ファイルの末尾に次のような行を追加します。各フィールド間にタブを使用することに注意してください。

user_name ALL=(ALL)  NOPASSWD:ALL 

user_nameはsudoと入力できるようになり、パスワードの入力を求められません。

visudoは、viエディタを反映し、viと同じコマンドを使用するテキストエディタです。

関連する問題