2009-09-03 148 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相同的命令。