我试图获得一列所有用户和Mac OS X 10.5+上的所有组。我怎样才能做到这一点?所有用户和组的列表
例如,我机器上所有用户的列表应该返回: _amavisd, _appowner, _appserver, _ard, _atsserver, _calendar, _carddav, _clamav, _coreaudiod, _cvmsroot, _cvs, _cyrus, _devdocs, _dovecot, _eppc, _installer, _jabber, _lda, _locationd, _lp, _mailman, _mcxalr, _mdnsresponder, _mysql, _pcastagent, _pcastserver, _postfix, _qtss, _sandbox, _screensaver, _securityagent, _serialnumberd, _softwareupdate, _spotlight, _sshd, _svn, _teamsserver, _timezone, _tokend, _trustevaluationagent, _unknown, _update_sharing, _usbmuxd, _uucp, _windowserver, _www, _xgridagent, _xgridcontroller, daemon, dave, nobody, root
(这是手动编译的)。
如何以编程方式获取该列表(以及所有组的相应列表)?我打开替代(非C型)解决方案,如AppleScript的,命令行等
更新很长一段时间后
TALlama's answer促使我研究了API打开目录,我发现这个列表可以通过编程方式轻松获得:
#import <OpenDirectory/OpenDirectory.h>
ODSession *s = [ODSession defaultSession];
ODNode *root = [ODNode nodeWithSession:s name:@"/Local/Default" error:nil];
ODQuery *q = [ODQuery queryWithNode:root forRecordTypes:kODRecordTypeUsers attribute:nil matchType:0 queryValues:nil returnAttributes:nil maximumResults:0 error:nil];
NSArray *results = [q resultsAllowingPartial:NO error:nil];
for (ODRecord *r in results) {
NSLog(@"%@", [r recordName]);
}
这将记录系统上每个用户的用户名。用kODRecordTypeGroups
代替将会得到所有组的列表。
的-[ODQuery resultsAllowingPartial:error:]
方法是阻塞调用,所以你要么需要在后台线程执行该代码,或使用<ODQueryDelegate>
聚集的结果。
不幸的是,你能够手动制作详尽的列表的事实表明你已经有一种方法来自动化它。你大概读了一个目录名称列表或什么?很好的问题,但问。谷歌在大约15秒内找到了答案。 – TheJacobTaylor 2009-08-20 03:28:17
我从另一个程序中获得了它。 – 2009-08-20 03:34:37
澄清:另一个程序有一个popupbutton列表,我把它复制出来。我想要一个类似的popupbutton。 =)至于谷歌,我花了一段时间搜索“mac获取所有用户列表”的变化,并找不到任何相关的。 – 2009-08-20 03:36:23