AppleScript中的用户属性/权限
我想写一个applescript程序,首先检查用户是否有管理员权限,如果没有,然后请求重新登录或其他什么 最终脚本将需要对我刚刚创建的文件夹执行sudo chmod。。。我可以用do脚本和管理员权限来完成 然而,我还没有弄清楚如何为applescript命令请求管理员权限,甚至只是检查用户是否具有管理员权限 有人知道吗?或者至少给我指出一个好的applescript参考?(Apple.com参考资料对我没有帮助)AppleScript中的用户属性/权限,applescript,privileges,finder,Applescript,Privileges,Finder,我想写一个applescript程序,首先检查用户是否有管理员权限,如果没有,然后请求重新登录或其他什么 最终脚本将需要对我刚刚创建的文件夹执行sudo chmod。。。我可以用do脚本和管理员权限来完成 然而,我还没有弄清楚如何为applescript命令请求管理员权限,甚至只是检查用户是否具有管理员权限 有人知道吗?或者至少给我指出一个好的applescript参考?(Apple.com参考资料对我没有帮助) 谢谢。这应该是一个开始:只需使用具有管理员权限的。如果用户没有管理员权限,Appl
谢谢。这应该是一个开始:只需使用具有管理员权限的
。如果用户没有管理员权限,Applescript将提示他们输入名称和密码。使用尝试。。。错误时
阻止,以防用户取消、输入错误的密码或没有管理员权限
如果确实想知道当前用户是否为管理员,请检查该用户是否在管理员组中:
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()
苹果论坛的解决方案:
if ("80" is not in (do shell script "id -G")) then
Error....
看起来很有意思。这很难理解,正如Philip Regan所说,我是通过命令行来实现的,但它似乎给了我所需要的保护…这里有另一个没有人提到的替代解决方案。
dscl命令允许您执行各种目录服务任务,其中之一是能够查找用户的帐户类型
命令:dscl。阅读/群组/管理员群组成员资格
将列出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是true还是false,就可以执行各种函数。此外,如果脚本是通过ARD部署或发送的,则可以设置userName变量(上面脚本中的第一行)以使用whoami命令检查当前用户。因此,第一行将如下所示:
set userName to do shell script "whoami"
我有点恼火,因为System Events在user对象中没有这个属性,但是基于id和dscl的查询似乎是最好的选择。为了便于阅读,我使用:
set imadmin to " admin " is in (do shell script "groups")
注意admin周围的空格。这可以防止它与lpadmin之类的组混淆。不,我完全知道如何在unix中实现它。问题是如何在applescript中检查用户的权限。很好,但我认为您必须使用shell命令来获取该信息。Applescript本身并没有比“具有管理员权限”更深入的内容。我认为“具有管理员权限”除了do shell脚本之外,对任何东西都不起作用。。。。其他事情都失败了。。。我想我可以把整个想法放在一个试块里。。。但另一个论坛给了我:如果(“80”不在(do shell脚本“id-G”)中,这更聪明,但似乎有效……我认为您需要chmod
的管理员权限,它将被包装在do shell脚本中。至于do shell脚本“id-G”
,上面的代码做了同样的事情(注意id-G-n
),但是使用组名而不是数字,并且正确地处理子字符串(假设有一个编号为180、580或800的组,或者命名为“dbadmin”)。不需要循环,这两个原因都是因为不需要循环来检查数据是否在列表中,而且循环体在i
上是不变的。移除重复/结束重复。