我想编写一个AppleScript程序,首先检查用户是否具有管理员权限,如果没有,则请求重新登录或其他内容。
最终,脚本需要对我刚创建的文件夹执行sudo chmod ...我可以使用do脚本和管理员权限来执行此操作。
但是我还没想出如何为applecript命令请求admin privs,或者甚至只检查用户是否具有admin privs。
有人知道吗?或者至少指点一下GOOD Applecript ref? (Apple.com参考没有帮助我)
感谢。
答案 0 :(得分:5)
Apple论坛的解决方案:
if ("80" is not in (do shell script "id -G")) then
Error....
似乎可以解决问题。这很难读,正如Philip Regan所说,我是通过命令行完成的,但似乎给了我需要的保护......
答案 1 :(得分:1)
只需使用with administrator privileges
即可。如果用户没有管理员权限,Applescript将提示他们输入名称和密码。如果用户取消,输入错误的密码或只是普通没有管理员权限,请使用try ... on error
块。
如果您真的想知道当前用户是否是管理员,请检查该用户是否在管理员组中:
on amIAdmin()
set prevDelims to AppleScript's text item delimiters
set AppleScript's text item delimiters to " "
set groups to do shell script "id -G -n"
set groupList to text items of groups
set isAdmin to "admin" is in groupList
set AppleScript's text item delimiters to prevDelims
return isAdmin
end isAdmin
amIAdmin()
答案 2 :(得分:1)
这是另一个没有人提及的替代解决方案。
dscl 命令允许您执行各种目录服务任务,其中一项是查找用户帐户类型的功能。
命令: dscl。 read / Groups / admin GroupMembership 将列出OS X上的所有管理员帐户。
因此,如果您想将其合并到AppleScript中,您可以执行以下操作:
set userName to "whatever username you wanted to check"
set readAdminGroup to do shell script "dscl . read /Groups/admin GroupMembership"
set AppleScript's text item delimiters to " "
set adminNames to text items of readAdminGroup
--loop through Admin Group to check if username exists
repeat with i in adminNames
if adminNames does not contain userName then
set isAdmin to false
else
set isAdmin to true
end if
end repeat
return isAdmin
一旦你发现变量isAdmin是真还是假,你就可以执行各种功能。此外,如果正在部署脚本或通过ARD发送脚本,您可以设置userName变量(上述脚本中的第一行)以使用whoami命令检查当前用户。所以第一行看起来像这样:
set userName to do shell script "whoami"
答案 3 :(得分:1)
我有点恼火,系统事件在用户对象中没有属性,但基于id和dscl的查询似乎是最好的选择。为了便于阅读,我使用:
set imadmin to " admin " is in (do shell script "groups")
请注意管理员周围的空格。这可以防止它与lpadmin这样的组混淆。
答案 4 :(得分:0)