• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Benutzernamen und Kurznamen auslesen?

peha24

Tokyo Rose
Registriert
01.07.09
Beiträge
71
Hallo

In unserem Netzwerk haben wir etwa 1000 Benutzer. Wie kann ich einfach die Namen und Kurznamen der Benutzer auslesen? Habe es probiert mit Export aus dem Arbeitsgruppenmanager -> Import in Excel -> "Fortwerfen" der (vielen) überflüssigen Informationen. Es muss doch irgendwo eine einfachere Möglichkeit geben, die beiden Infos auszulesen! Wo kriege ich die her?
Danke vielmals für alle Hinweise!

Gruss aus der Schweiz
p.
 

Rastafari

deaktivierter Benutzer
Registriert
10.03.05
Beiträge
18.150
Liste aller "natürlichen" Benutzer (die einen Langnamen besitzen)
Als Tab-separierte Liste mit numerischer UID ausgeben:
Code:
[SIZE="-1"]list="$(
for u in $(dscl . -list /users|grep -v "^_");
do
  nr="$(id -u "$u")";
  if [ "$u" != "nobody" ] &&
     [ $nr -ge 100 ];
  then
     fn="$(dscl . -read /users/$u RealName)";
     fn="${fn//:$'\n' /: }";
     rn="$(dscl . -read /users/$u RecordName)";
     rn="${rn//:$'\n' /: }";
     [[ "$fn" != "RealName:" ]] &&
     [[ "$rn" != "RecordName:" ]] &&
     echo -e "${rn#* }\t($nr)\t${fn#* }" | sort;
  fi;
done; )" && echo -e "\n\n${list}\n";
[/SIZE]
 

peha24

Tokyo Rose
Registriert
01.07.09
Beiträge
71
Danke für das Script!
Es funktioniert - leider jedoch nur für die lokalen User. Jene, welche sich über das Netzwerk anmelden können, bringe ich nicht raus, nur jene, welche als Benutzer in den Systemeinstellungen erscheinen. Hast du da evtl. eine Ergänzung?
Danke!
 

Rastafari

deaktivierter Benutzer
Registriert
10.03.05
Beiträge
18.150
Hast du da evtl. eine Ergänzung?
dscl operates on a datasource specified on the command line.
This may be a node name or a Mac OS X Server (10.2 or later) host
specified by DNS hostname or IP address. Node names may be
absolute paths beginning with a slash ("/"), or relative domain paths
beginning with a dot (".") character, which specifies the local domain,
or "..", specifying the local domain's parent.
If the hostname or IP address form is used then the user must specify
the -u option and either the -P of -p options to specify an
administrative user and password on the remote host to authenticate
with to the remote host. ...
Code:
[SIZE="-1"]ds_admin="[COLOR="Sienna"]foo[/COLOR]";
ds_passwort="[COLOR="Sienna"]bar[/COLOR]";
ds_server="[COLOR="Sienna"]my.server.host[/COLOR]";

list="$(
for u in $(dscl -u "$ds_admin" -P "$ds_passwort" "$ds_server" -list /users|grep -v "^_");
do
  nr="$(id -u "$u")";
  if [ "$u" != "nobody" ] &&
     [ $nr -ge 100 ];
  then
     fn="$(dscl -u "$ds_admin" -P "$ds_passwort" "$ds_server" -read /users/$u RealName)";
     fn="${fn//:$'\n' /: }";
     rn="$(dscl -u "$ds_admin" -P "$ds_passwort" "$ds_server" -read /users/$u RecordName)";
     rn="${rn//:$'\n' /: }";
     [[ "$fn" != "RealName:" ]] &&
     [[ "$rn" != "RecordName:" ]] &&
     echo -e "${rn#* }\t($nr)\t${fn#* }" | sort;
  fi;
done; )" && echo -e "\n\n${list}\n";
[/SIZE]
Sollte eigentlich in jeder gängigen Umgebung arbeiten.
 

peha24

Tokyo Rose
Registriert
01.07.09
Beiträge
71
Habe grad gemerkt, dass ich glaub noch viel lernen muss: Wo liegt hier das Problem? Terminal spuckt folgende Fehlermeldungen aus (unter AppleScriptEditor lief der Code nicht, aber das ist glaub so, oder?): Kannst du mir bitte nochmals ein bisschen Nachhilfe-Unterricht erteilen? Danke!

Code:
 Last login: Wed Sep  2 07:55:02 on console
fileserver:~ admin$ ds_admin="diradmin";
fileserver:~ admin$ ds_passwort="xxxxxxx";
fileserver:~ admin$ ds_server="server.intranet.mac";
fileserver:~ admin$ 
fileserver:~ admin$ list="$(
> for u in $(dscl -u "$ds_admin" -P "$ds_passwort" "$ds_server" -list /users|grep -v "^_");
> do
>  nr="$(id -u "$u")";
>  if [ "$u" != "nobody" ] &&
>     [ $nr -ge 100 ];
>  then
>     fn="$(dscl -u "$ds_admin" -P "$ds_passwort" "$ds_server" -read /users/$u RealName)";
>     fn="${fn//:$'\n' /: }";
>     rn="$(dscl -u "$ds_admin" -P "$ds_passwort" "$ds_server" -read /users/$u RecordName)";
>     rn="${rn//:$'\n' /: }";
>     [[ "$fn" != "RealName:" ]] &&
>     [[ "$rn" != "RecordName:" ]] &&
>     echo -e "${rn#* }\t($nr)\t${fn#* }" | sort;
>  fi;
> done; )" && echo -e "\n\n${list}\n";
[COLOR=DarkGreen][I]id: Cannot: no such user
-bash:  nr=: command not found
-bash:  if: command not found
-bash:  then: command not found
-bash:     fn=Cannot open remote host, error: DSOpenDirServiceErr: command not found
-bash:     fn=: command not found
-bash:     rn=Cannot open remote host, error: DSOpenDirServiceErr: command not found
-bash:     rn=: command not found
-bash:     [[: command not found
-bash:  fi: command not found
id: open: no such user
-bash:  nr=: command not found
-bash:  if: command not found
-bash:  then: command not found
-bash:     fn=Cannot open remote host, error: DSOpenDirServiceErr: command not found
-bash:     fn=: command not found
-bash:     rn=Cannot open remote host, error: DSOpenDirServiceErr: command not found
-bash:     rn=: command not found
-bash:     [[: command not found
-bash:  fi: command not found
id: remote: no such user
-bash:  nr=: command not found
-bash:  if: command not found
-bash:  then: command not found
-bash:     fn=Cannot open remote host, error: DSOpenDirServiceErr: command not found
-bash:     fn=: command not found
-bash:     rn=Cannot open remote host, error: DSOpenDirServiceErr: command not found
-bash:     rn=: command not found
-bash:     [[: command not found
-bash:  fi: command not found
id: host,: no such user
-bash:  nr=: command not found
-bash:  if: command not found
-bash:  then: command not found
-bash:     fn=Cannot open remote host, error: DSOpenDirServiceErr: command not found
-bash:     fn=: command not found
-bash:     rn=Cannot open remote host, error: DSOpenDirServiceErr: command not found
-bash:     rn=: command not found
-bash:     [[: command not found
-bash:  fi: command not found
id: error:: no such user
-bash:  nr=: command not found
-bash:  if: command not found
-bash:  then: command not found
-bash:     fn=Cannot open remote host, error: DSOpenDirServiceErr: command not found
-bash:     fn=: command not found
-bash:     rn=Cannot open remote host, error: DSOpenDirServiceErr: command not found
-bash:     rn=: command not found
-bash:     [[: command not found
-bash:  fi: command not found
id: DSOpenDirServiceErr: no such user
-bash:  nr=: command not found
-bash:  if: command not found
-bash:  then: command not found
-bash:     fn=Cannot open remote host, error: DSOpenDirServiceErr: command not found
-bash:     fn=: command not found
-bash:     rn=Cannot open remote host, error: DSOpenDirServiceErr: command not found
-bash:     rn=: command not found
-bash:     [[: command not found
-bash:  fi: command not found[/I][/COLOR]
[COLOR=DarkGreen][I]fileserver:~ admin$ [/I][/COLOR]
 

Rastafari

deaktivierter Benutzer
Registriert
10.03.05
Beiträge
18.150
unter AppleScriptEditor lief der Code nicht, aber das ist glaub so, oder?
Shellskripte laufen im Terminal (präziser gesagt, in "bash").
Der AppleScript Editor verlangt nach AppleScript-Code.
Shellskripte kann man dort einbetten, dazu sind sie aber gemäss der Syntax von AppleScript zu "quoten" und zu "kapseln".

D.h. dass Zeichen mit Sonderbedeutung maskiert werden müssen (durch vorangestellten Backslash) und dass das ganze an ein AS-Kommando namens "do shell script ..." zu übergeben ist.
Das erstere ist bei komplexeren Befehlen eine sehr schnell ausufernde und extrem unleserliche Tortur.
Am einfachsten tut man sich damit als Anfänger, wenn man statt dem AS Editor lieber den Automator und die Aktion "Shellskript ausführen" benutzt. Dort braucht man sein Shellskript nur unverändert einzufügen, um das nötige Quoting kümmert sich das Programm vollständig selbst; und die Automator-Aktion stellt hier die Kapsel dar, da braucht man sich also auch nicht mehr drum kümmern.

bisschen Nachhilfe
Zunächst mal muss das hier ganz alleine laufen.
(Der Benutzer "diradmin" sollte auf dem Server natürlich auch existieren.)
Code:
[SIZE="-1"]ds_admin="diradmin";
ds_passwort="xxxxxxx";
ds_server="[COLOR="DarkRed"]ldap://LDAPv3/[/COLOR]server.intranet.mac";
dscl -u "$ds_admin" -P "$ds_passwort" "$ds_server" -list /Users[/SIZE]
Und? Klappt damit die Verbindung zum Server?
 

peha24

Tokyo Rose
Registriert
01.07.09
Beiträge
71
Tatsächlich, es hat geklappt! Nachdem ich verschiedentlich mit den Passwörtern und vor allem den richtigen Ordnern "rumgedoktert" (schönes Wort, oder? ;)) hatte, gelang mir gestern gegen Abend der Durchbruch.
Du hast mir sehr geholfen, danke vielmals!

p.