2009-09-03 212 views
3

我盡了最大努力找出了Stack Overflow和Internet上的許多腳本問題的解決方案,但似乎無法找到所需的解決方案。在OS X上使用管理員權限運行腳本

我想要做的是創建一個更自動化,更少的點擊解決方案,以刪除系統上的所有移動緩存用戶帳戶。我已經登錄並手動進入用戶帳戶,並通過單擊「 - 」按鈕逐個刪除用戶,然後單擊用戶數據的「立即刪除」。這很有效,但是很費時間,我有更好的事情要處理我的時間。所以我知道必須有一種方法來用腳本來做到這一點。

我跑過這段代碼:

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

如果我運行這個在終端我得到許可的錯誤。所以我想我需要用sudo來運行它。所以我開始研究創建AppleScript來運行腳本,但我似乎無法找到正確的方法來完成它。

任何想法?順便說一下,我對Mac上的腳本編程不熟悉,所以請評論你的代碼,以便我知道發生了什麼,所以我不只是運行一些腳本代碼而不知道它會做什麼。 :)

謝謝

回答

5

要使用sudo或管理員權限執行shell腳本追加with administrator privileges到您的do shell script行的末尾。例如:

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

你可以找到更多關於蘋果公司的技術說明處理do shell script

這就是說,節省這是一個shell腳本,並使用sudo會很好的工作運行shell腳本。

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

保存它說removeUser.sh,使用chmod將其設置爲可執行文件(chmod 755),然後運行它(sudo ./removeUser.sh

+0

我試着在蘋果腳本中運行它,但是現在我得到了一大堆「刪除:無效路徑」,我認爲它是針對每個試圖刪除的用戶。 AppleScript文件在桌面上。它需要成爲其他地方嗎?我需要給刪除命令一個更有效的路徑嗎? – ScottN 2009-09-03 02:59:58

+0

我在命令中刪除了「| tr'/ n'''」,因爲在終端中運行list命令打印用戶非常奇怪。但現在我有另一個問題。當我第一次運行AppleScript並且沒有遇到錯誤時,我認爲它工作正常。檢查系統偏好設置中的帳戶列表仍會列出用戶,因此刪除操作不會完全從系統中刪除用戶帳戶。但是,如果我再次運行list命令,終端窗口中不會打印任何用戶,現在該腳本沒有任何可運行的內容。我現在做錯了什麼? 「dscl。-delete」命令是否和GUI一樣? – ScottN 2009-09-03 03:26:29

+0

好吧,他們仍然在系統偏好中出現,直到我重新啓動系統,然後他們不再存在。我必須手動刪除用戶文件夾。但這隻需要點擊幾下。我可能會對此感到滿意。最好同時刪除用戶文件夾。 – ScottN 2009-09-03 03:40:49

0

我沒有一個mac方便,所以我不能驗證這是否會工作。

嘗試運行 蘇 -

然後運行腳本。如果可行,請嘗試使用 crontab -e

並添加一個條目以運行您的腳本。

您是否熟悉crontab?以及如果不是谷歌它,如果需要的話。 但基本上每天半夜你必須像 0 * * * * /路徑/到/腳本

參見運行:http://en.wikipedia.org/wiki/Cron

+0

你能更好地構建你的答案嗎?我不確定「su - 」是什麼。這只是簡短的sudo嗎? – ScottN 2009-09-03 02:16:03

+0

su是「替代用戶」的簡稱。它允許您從終端以root身份登錄。 – 2009-09-03 02:25:23

2

您可以通過編輯系統的sudoers文件做到這一點。這將允許您用於運行此腳本的帳戶(通過cron等)能夠在不使用密碼的情況下運行sudo。

要編輯使用visudo的sudoers文件,但它必須以管理員權限運行。嘗試:

$ sudo visudo 

添加一行類似如下的文件的結尾,用誰將會運行腳本的用戶更換USER_NAME。請注意,在每個字段之間使用製表符

user_name ALL=(ALL)  NOPASSWD:ALL 

現在USER_NAME應該能夠輸入sudo並不會提示輸入密碼。

另請注意,visudo是一種文本編輯器,它反映vi編輯器並使用與vi相同的命令。