すべてのユーザーとグループのリスト 質問する

すべてのユーザーとグループのリスト 質問する

リストを取得しようとしています全て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(これは手動で苦労してコンパイルされました)。

そのリスト (および対応するすべてのグループのリスト) をプログラムで取得するにはどうすればよいでしょうか? Applescript、コマンドラインなどの代替 (C ベースではない) ソリューションも検討します。


久しぶりの更新

TALlamaの答えOpen Directory の 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>結果を集計する必要があります。

ベストアンサー1

必要なツールはほぼ間違いなく dscl です。これを行う最も短い方法は既に指摘されています。

$ dscl . list /users
$ dscl . list /groups

ただし、各ユーザーに関する情報を出力する場合は、以下を使用しますreadall

$ dscl . readall /users
$ dscl . readall /groups

そして、その情報をプログラムで解析する必要がある場合は、-plist を使用すると作業が簡単になります。

$ dscl -plist . readall /users
$ dscl -plist . readall /groups

おすすめ記事