我想编写一个applescript程序,首先检查用户是否具有管理员权限,如果没有,则请求重新登录或其他内容。
最终,脚本将需要对我刚刚创建的文件夹执行 sudo chmod ...我可以使用 do 脚本和管理员权限来执行此操作。
但是,我还没有弄清楚如何为 applescript 命令请求 admin privs,甚至只是检查用户是否具有 admin privs。
有人知道吗?或者至少指向我一个好的applescript ref?(Apple.com 参考对我没有帮助)
谢谢。
我想编写一个applescript程序,首先检查用户是否具有管理员权限,如果没有,则请求重新登录或其他内容。
最终,脚本将需要对我刚刚创建的文件夹执行 sudo chmod ...我可以使用 do 脚本和管理员权限来执行此操作。
但是,我还没有弄清楚如何为 applescript 命令请求 admin privs,甚至只是检查用户是否具有 admin privs。
有人知道吗?或者至少指向我一个好的applescript ref?(Apple.com 参考对我没有帮助)
谢谢。
苹果论坛的解决方案:
if ("80" is not in (do shell script "id -G")) then
Error....
似乎可以解决问题。很难阅读,正如菲利普·里根所说,我是通过命令行来做的,但它似乎给了我需要的保护......
只需使用with administrator privileges
. 如果用户没有管理员权限,Applescript 会提示他们输入名称和密码。try ... on error
如果用户取消,输入错误的密码或只是没有管理员权限,请使用块。
如果您真的想知道当前用户是否是管理员,请检查该用户是否在 admin 组中:
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()
我有点恼火,系统事件在用户对象中没有为此的属性,但基于 id 和 dscl 的查询似乎是最好的选择。为了可读性,我使用:
set imadmin to " admin " is in (do shell script "groups")
注意 admin 周围的空格。这可以防止它与 lpadmin 等组混淆。
这是另一种尚未有人提及的替代解决方案。
dscl命令允许您执行各种目录服务任务,其中
之一是能够查找用户的帐户类型。
命令: dscl 。阅读 /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"
通过MacScripter.net这应该是一个开始:管理权限(第 2 页,共 2 页)