Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 在OS X上以管理员权限运行脚本_Macos_Scripting_Applescript_Dscl - Fatal编程技术网

Macos 在OS X上以管理员权限运行脚本

Macos 在OS X上以管理员权限运行脚本,macos,scripting,applescript,dscl,Macos,Scripting,Applescript,Dscl,我已经尽了最大努力找到了一个解决方案,解决了堆栈溢出和internet上的许多脚本问题,但我似乎找不到我需要的解决方案 我想做的是创建一个自动化程度更高、点击次数更少的解决方案,以删除系统上的所有移动缓存用户帐户。我已经登录并手动转到用户帐户,通过单击“-”按钮,然后单击用户数据的“立即删除”,一次删除一个用户。这很有效,但很耗时,我有更好的事情要做。所以我知道一定有办法用脚本来完成 我遇到了以下代码: for cuser in `dscl . -list /Users Authenticati

我已经尽了最大努力找到了一个解决方案,解决了堆栈溢出和internet上的许多脚本问题,但我似乎找不到我需要的解决方案

我想做的是创建一个自动化程度更高、点击次数更少的解决方案,以删除系统上的所有移动缓存用户帐户。我已经登录并手动转到用户帐户,通过单击“-”按钮,然后单击用户数据的“立即删除”,一次删除一个用户。这很有效,但很耗时,我有更好的事情要做。所以我知道一定有办法用脚本来完成

我遇到了以下代码:

for cuser in `dscl . -list /Users AuthenticationAuthority | grep LocalCachedUser | awk '{print $1}' | tr '/n' ' '`; do
    dscl . -delete /Users/$cuser
done
如果在终端中运行此操作,则会出现权限错误。所以我想我需要和sudo一起运行它。所以我开始考虑创建AppleScripts来运行脚本,但我似乎找不到正确的方法

有什么想法吗?顺便说一句,我对Mac上的脚本还不熟悉,所以请评论一下你的代码,这样我就知道发生了什么,所以我不会只是运行一些脚本代码而不知道它会做什么。:)


谢谢

我手边没有mac电脑,所以我无法验证这是否有效

试着跑步 苏

然后运行脚本。如果行得通,试试看 crontab-e

并添加一个条目来运行您的脚本

你熟悉crontab吗?好吧,如果不是谷歌,如果需要的话。 但基本上每天午夜都要运行它 0****/path/to/script


请参阅:

要使用
sudo
或管理员权限执行shell脚本,请在
do shell脚本
行的末尾附加具有管理员权限的
。例如:

do shell script "/path/to/script/file.sh" user name "adminusershortname" password "password" with administrator privileges
你可以找到更多关于苹果公司的技术说明

也就是说,将其保存为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

将其另存为say removeUser.sh,使用
chmod
将其设置为可执行文件(
chmod 755
),然后运行它(
sudo./removeUser.sh

您可以通过编辑系统的sudoers文件来完成此操作。这将允许您用来运行此脚本的帐户(通过cron等)能够在不使用密码的情况下运行sudo

要编辑sudoers文件,您可以使用visudo,但它必须在具有管理员权限的情况下运行。尝试:

$ sudo visudo
在文件末尾添加一行,如下所示,用运行脚本的用户替换user\u name。注意,在每个字段之间使用制表符

user_name    ALL=(ALL)     NOPASSWD:ALL
现在用户名应该可以键入sudo,并且不会提示输入密码


另外请注意,visudo是一个文本编辑器,它镜像了vi编辑器,并使用与vi相同的命令。

您能更好地构建您的答案吗?我不确定“苏”是什么。那只是sudo的缩写吗?su是“替代用户”的缩写。它允许您以root用户身份从终端登录。我尝试在apple脚本中运行它,但现在我得到了一大堆“delete:Invalid Path”,我认为这是针对每个试图删除的用户的。AppleScript文件位于桌面上。需要换个地方吗?我需要给delete命令一个更有效的路径吗?我从命令中删除了“|tr'/n”“”,因为在终端中运行list命令会非常奇怪地打印用户。但现在我有另一个问题。当我第一次运行AppleScript时,没有出现错误,我认为它可以工作。在系统首选项中检查帐户列表仍然会列出用户,因此删除操作没有从系统中完全删除用户帐户。但是,如果我再次运行list命令,终端窗口中不会打印任何用户,因此现在脚本没有要运行的内容。我现在做错了什么?“dscl.-delete”命令是否与GUI做相同的事情?好的,它们仍然显示在系统首选项中,直到我重新启动系统,然后它们就不在了。我必须手动删除用户文件夹。但这只需要点击几下。我可能对此感到满意。同时删除users文件夹会很好。对不起,忘记粘贴了,我在dscl命令之后在脚本中添加了“rm-rf/users/$cuser”。